CastError: Cast to ObjectId failed for value "users.client.module.js" at path "_id"

CastError: Cast to ObjectId failed for value "users.client.module.js" at path "_id"

这又是我在阅读 MEAN 堆栈开发书籍时遇到的另一个错误。我们刚刚添加了一个新的用户模块和一个用户服务,以允许 angular 使用来自经过身份验证的用户的用户信息。我在终端中收到以下文件的 500 错误

'/users/users.client.module.js'

这是与之相关的服务文件。据我所知,这是一个 Mongoose 错误。为什么会弹出这个?我什至还没有对用户进行身份验证,这发生在索引的页面加载时。

索引控制器

exports.render = function(req,res) {

res.render('index', {
    title: 'Hello World',
    user: JSON.stringify(req.user)
});

};

Index.ejs

<!DOCTYPE html>

<html xmlns:ng="http://angularjs.org">
<head>
    <title><%= title%></title>
</head>
<body>
    <% if (user) { %>
        <a href='/signout'>Sign Out</a>
    <% } else { %>
            <a href='/signup'>Sign-up</a>
            <a href='/signin'>Sign-in</a>
    <% } %>

    <h1><%= title%></h1>

    <section ng-view></section>

    <script type="text/javascript">
        window.user = <%- user || 'null' %>
    </script>

    <script type="text/javascript" src="/lib/angular/angular.js"></script>
    <script type="text/javascript" src="/lib/angular-route/angular-route.js"></script>
    <script type="text/javascript" src="/users/users.client.module.js"></script>
    <script type="text/javascript" src="/users/services/authentication.client.service.js"></script>
    <script type="text/javascript" src="/application.js"></script>
    <script type="text/javascript" src="/example/example.client.module.js"></script>
    <script type="text/javascript" src="/example/controllers/example.client.controller.js"></script>
    <script type="text/javascript" src="/example/config/example.client.routes.js"></script>

</body>

用户模块

angular.module('users',[]);

用户身份验证服务

angular.module('users').factory('Authentication', [
function(){
    this.user = window.user;

    return {
        user: this.user
    };
}
]);

编辑 - 2016 年 2 月 2 日将视图中的脚本标签重新排序到此顺序,但仍然不行。

    <script type="text/javascript" src="/lib/angular/angular.js"></script>
    <script type="text/javascript" src="/lib/angular-route/angular-route.js"></script>


    <script type="text/javascript" src="/example/example.client.module.js"></script>
    <script type="text/javascript" src="/example/controllers/example.client.controller.js"></script>
    <script type="text/javascript" src="/example/config/example.client.routes.js"></script>

    <script type="text/javascript" src="/users/users.client.module.js"></script>
    <script type="text/javascript" src="/users/services/authentication.client.service.js"></script>

    <script type="text/javascript" src="/application.js"></script>

如果您评论 users.server.routes.js 此代码:

遇到同样的问题并解决
app.route('/users')
    .post(users.create)
    .get(users.list);

app.route('/users/:userId')
    .get(users.read)
    .put(users.update)
    .delete(users.delete);

app.param('userId', users.userByID);

本书的源代码在使用users.client.module.js模块时导致错误。在我的分析中,在 index.ejs 中加载的静态文件 /users/users.client.module.js 似乎被解释为服务器路由 /users/:userId 导致在 MongoDB 中搜索用户ID 用户.client.module.js.通过在 express.js 配置文件中将 app.use(express.static('./public') 语句放在设置的开头(例如在语句 var app = express(); 之后)解决了这个问题,但肯定在 de require routes 语句之前。

注意:作者在 book's github repo 中添加了这一行(就在结束之前,"return app"):

重新定位

app.use(express.static('./public'));

对我不起作用。但只需重命名 public/users 目录即可。 (感谢 Bsord@disqus)

我遇到了同样的问题,但我是来自 pm2 的 运行。在关闭 pm2 并手动执行 node server.js 后,它工作正常。不知道为什么...