MEAN Stack:Cast to ObjectId 值“:id”失败
Posted
技术标签:
【中文标题】MEAN Stack:Cast to ObjectId 值“:id”失败【英文标题】:MEAN Stack: Cast to ObjectId failed for value ":id" 【发布时间】:2015-06-28 10:01:51 【问题描述】:我变得一无所知,我的 MEAN 应用程序中的 Cast Error 该怎么办。
我对 MEAN 和 REST 很陌生...我已经构建了一个项目管理应用程序。
将所有项目列在一个列表中,这不是问题,但现在当我试图详细了解一个项目 GET /projects/:id
时,我收到了这个错误:Cast Error: Vast to ObjectId failed for value :id at path _id
我正在为我的项目使用 Mongoose Schema:
var mongoose = require ('mongoose');
var projectSchema = mongoose.Schema(
name : String,
description : String,
tags : String,
media : data: Buffer, contentType: String,
updated_at : type: Date, default: Date.now
);
我的路线如下所示:
app.get('/projects_view/:id', function (req, res, next)
Project.findById(req.params.id, function (err, project)
if (err) return next (err);
res.json(project);
);
);
最后但并非最不重要的是我的详细视图的 Angular 模板:
<div class="container text-center">
<div ng-controller="ProjectController">
project.name
</div>
</div>
<script>
var app = angular.module('myApp', []);
app.controller('ProjectController', function($scope, $http)
$http.get('/projects_view/:id').then(function(res)
$scope.project = res.data;
);
);
</script>
我被这个错误弄疯了。希望你能帮助我。 来自德国的亲切问候, 大卫
解决方案: 在尝试了几件事之后,我设法使它工作。感谢 plus- 和 frhd 的帮助! 所以这是解决方案,我如何从我的 URL 中获取 ID:
app.controller('ProjectController', function($scope, $http)
var url = window.location.pathname;
var id = url.substring(url.lastIndexOf('/') + 1);
$http.get('/projects_view/'+id).success(function(data)
$scope.project = data;
);
);
伙计们,你们让我开心,谢谢!
【问题讨论】:
您是否将:id
替换为任何有用的数据?看起来您只是在发送该字符串,因此显然它期望您的 mongodb 中的 _id
字段具有可消化的值。
我希望服务器从我的 URL 中获取 ID,因为我已经在详细信息页面上,例如:http://localhost:3001/projects/5534f541849d5170126a778d
。我是不是弄错了req.params.id
的工作方式?
首先,你必须告诉 Angular 关于 URL 并用所需的参数替换 :id
。为此,您至少需要ngRoute
之类的东西。
【参考方案1】:
$http.get('/projects_view/:id')....
这是您的错误所在。您在此处的 ajax 调用是使用硬编码的字符串 :id
而不是实际值发送的。
你需要从你当前的url解析id,然后传递给$http.get
url参数
【讨论】:
感谢您的快速解释,我理解这样一个事实,我必须从我的 URL 中解析 ID 并已经使用$routeParams
尝试过,但仍然不知道为什么它没有工作。可以举个例子吗?
我尝试过类似的方法,但不幸的是没有成功:<script> var app = angular.module('myApp', ['ngRoute']); app.config(['$routeProvider', function($routeProvider) $routeProvider. when('/projects/:param', controller: "routeController" ); ]); app.controller('routeController', function($scope, $routeParams, $http) $scope.param = $routeParams.param; $http.get('/projects_view/'+param).success(function(data) $scope.project = data; ); ); </script>
以上是关于MEAN Stack:Cast to ObjectId 值“:id”失败的主要内容,如果未能解决你的问题,请参考以下文章
Type safety: Unchecked cast from Object to ArrayList
Unable to cast object of type 'System.Int32' to type 'System.String'.
EF Core Error:Unable to cast object of type ‘System.DBNull‘ to type ‘System.String‘
Unable to cast object of type 'System.Int32' to type 'System.String'.
java.lang.Integer cannot be cast to java.lang.String
java.lang.ClassCastException: Ljava.lang.Object; cannot be cast to com.entity.Advertisem异常