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.geturl参数

【讨论】:

感谢您的快速解释,我理解这样一个事实,我必须从我的 URL 中解析 ID 并已经使用 $routeParams 尝试过,但仍然不知道为什么它没有工作。可以举个例子吗? 我尝试过类似的方法,但不幸的是没有成功:&lt;script&gt; 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; ); ); &lt;/script&gt;

以上是关于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异常