Node.js CastError:value“的转换为ObjectId失败”;5be86bf8170c2c22f8bb93a6“;在路径上“_id";对于“型号”;第页“;

Node.js CastError:value“的转换为ObjectId失败”;5be86bf8170c2c22f8bb93a6“;在路径上“_id";对于“型号”;第页“;,node.js,mongoose,Node.js,Mongoose,我正在用node/express/mongo/mongoose构建一个应用程序。我遇到了一个我似乎无法理解的错误,谷歌搜索到目前为止没有任何帮助 我试图创建一个编辑页面,但遇到了一个错误 Package.json { "name": "cmscart", "version": "1.0.0", "description": "", "main": "app.js", "scripts": { "test": "echo \"Error: no test specifi

我正在用node/express/mongo/mongoose构建一个应用程序。我遇到了一个我似乎无法理解的错误,谷歌搜索到目前为止没有任何帮助

我试图创建一个编辑页面,但遇到了一个错误

Package.json

{
  "name": "cmscart",
  "version": "1.0.0",
  "description": "",
  "main": "app.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "body-parser": "^1.18.3",
    "connect-flash": "^0.1.1",
    "ejs": "^2.6.1",
    "express": "^4.16.4",
    "express-messages": "^1.0.1",
    "express-session": "^1.15.6",
    "express-validator": "^5.3.0",
    "mongoose": "^5.3.10"
  }
}
编辑页面.ejs

<%- include('../_layouts/adminheader')  %>

    <h2 class="page-title">Edit a Page</h2>
    <a href="/admin/pages" class="btn btn-primary">Back to all Pages</a>
    <br>
    <br>

    <form method="post" action="/admin/pages/edit-page/<%= slug %> ">
        <div class="form-group">
            <label for="">Title</label>
            <input type="text" name="title" value="<%= title %>" class="form-control" placeholder="Title">

        </div>

        <div class="form-group">
            <label for="">Slug</label>
            <input type="text" name="slug" value="<%= slug %>" class="form-control" placeholder="Slug">

        </div>
        <div class="form-group">
            <label for="">Content</label>
            <textarea name="content" class="form-control" placeholder="Content" rows="10" cols="30"><%= content %></textarea>

        </div>

        <input type="hidden" name="id" value="<%= id %> ">
        <button class="btn btn-default">Submit</button>
    </form>


<%- include('../_layouts/adminfooter')  %>
/* GET edit page*/

/*  here after edit page "/:slug" because we didn't have a fixed value of url*/
router.get('/edit-page/:slug', function (req, res) {

    Page.findOne({ slug: req.params.slug }, function (err, page) {

        if (err) return console.log(err);

        res.render('admin/edit_page', {
            title: page.title,
            slug: page.slug,
            content: page.content,
            id: page._id
        });
    });


});




/* POST edit page*/



router.post('/edit-page/:slug', function (req, res) {
    req.checkBody('title', 'Title must have a value').notEmpty();
    req.checkBody('content', 'Content must have a value').notEmpty();

    var title = req.body.title;
    var slug = req.body.slug.replace(/\s+/g, '-').toLowerCase();
    if (slug == "") slug = title.replace(/\s+/g, '-').toLowerCase();

    var content = req.body.content;
    var id = req.body.id;


    var errors = req.validationErrors();
    if (errors) {
        res.render('admin/edit_page', {
            errors: errors,
            title: title,
            slug: slug,
            content: content,
            id: id
        });
    } else {
        Page.findOne({ slug: slug, _id: { '$ne': id } }, function (err, page) {

            if (page) {
                req.flash('danger', 'Page slug exists , choose another.');
                res.render('admin/edit_page', {
                    title: title,
                    slug: slug,
                    content: content,
                    id:id
                });
            }
            else {
                Page.findByIdAndUpdate(id, function (err, page) {
                    if (err) {
                        return console.log(err);
                    }
                    page.title = title;
                    page.slug = slug;
                    page.content = content;


                    page.save(function (err) {
                        if (err)
                            return console.log(err);
                        req.flash('success', 'Page added!');
                        res.redirect('/admin/pages');

                    });
                });
            }
        });
    }


});
在这篇文章中,我遇到了这个错误

CastError:model“Page”的路径“\u id”处的值“5BE86BF8170C22F8BB93A6”的转换为ObjectId失败 在新的CastError(D:\projects\cmscart\node\u modules\mongoose\lib\error\cast.js:29:11) 在ObjectId.cast(D:\projects\cmscart\node\u modules\mongoose\lib\schema\ObjectId.js:156:13) 在ObjectId.SchemaType.applySetters(D:\projects\cmscart\node\u modules\mongoose\lib\SchemaType.js:763:12) 在ObjectId.SchemaType.\u castForQuery(D:\projects\cmscart\node\u modules\mongoose\lib\SchemaType.js:1166:15) 在ObjectId.SchemaType.castForQuery(D:\projects\cmscart\node\u modules\mongoose\lib\SchemaType.js:1156:15) 位于ObjectId.SchemaType.castforqueryrapper(D:\projects\cmscart\node\u modules\mongoose\lib\SchemaType.js:1135:15) at cast(D:\projects\cmscart\node\u modules\mongoose\lib\cast.js:306:32) 在model.Query.Query.cast(D:\projects\cmscart\node\u modules\mongoose\lib\Query.js:4024:12) 位于model.Query.Query.\u castConditions(D:\projects\cmscart\node\u modules\mongoose\lib\Query.js:1690:10) 在model.Query.Query.\u findOne(D:\projects\cmscart\node\u modules\mongoose\lib\Query.js:1926:8) 位于process.nextTick(D:\projects\cmscart\node\u modules\kareem\index.js:369:33) at_combinedTickCallback(内部/流程/下一步勾选js:132:7) 在进程中。_tick回调(内部/process/next_tick.js:181:9) 消息:“对模型“页面”的路径“_id”处的值“5be86bf8170c2c22f8bb93a6”强制转换为ObjectId失败, 名称:“卡斯特罗”, stringValue:'5BE86BF8170C22F8BB93A6', 种类:“ObjectId”, 值:“5be86bf8170c2c22f8bb93a6”, 路径:“\u id”, 原因:未定义, 型号: {[功能:模型] hooks:Kareem{{u pres:[Object],{u posts:[Object]}, 基数: 猫鼬{ 连接:[数组], 模型:[对象], modelSchemas:[对象], 选项:[对象], _多元化:[功能:多元化], 插件:[Array]}, modelName:'页面', 型号:[功能:型号], db: 国家联系{ base:[对象], 集合:[对象], 模型:[对象], 配置:[对象], 复制品:假, 选项:null, 其他数据库:[], 关系数据库:{}, 国家:[反对], _预备状态:1, _这是错误的, _是的, “$internalEmitter”:[Object], _听:错, _connectionOptions:[对象], 名称:“cmscart”, 主机:“localhost”, 港口:27017, 用户:null, pass:null, 客户端:[对象], “$initialConnection”:[Object], _事件:[对象], _事件提示:1, db:[对象]}, 鉴别器:未定义, “$appliedMethods”:正确, “$appliedHooks”:正确, 模式: 模式{ obj:[对象], 路径:[对象], 别名:{}, 子路径:{}, 虚拟对象:[对象], SingleNestedPath:{}, 嵌套:{}, 继承:{}, 呼叫队列:[], _索引:[], 方法:{}, 方法选项:{}, 静态:{}, 树:[对象], 查询:{}, 子架构:[], 插件:[数组], “$id”:1, s:[对象], _用户提供的选项:{}, 选项:[对象], “$globalPluginsApplied”:true}, 收藏: 本地采集{ 集合:[对象], 选项:[对象], 名称:'pages', collectionName:“页面”, conn:[对象], 队列:[], 缓冲区:false, 发射器:[对象]}, 查询:{[Function]base:[Object]}, “$\uu insertMany”:[函数], “$init”:承诺{[Circular]}, “$catch”:true} {CastError:对于模型“Page”的路径“_id”处的值“5be86bf8170c2c22f8bb93a6”,转换为ObjectId失败 在新的CastError(D:\projects\cmscart\node\u modules\mongoose\lib\error\cast.js:29:11) 在ObjectId.cast(D:\projects\cmscart\node\u modules\mongoose\lib\schema\ObjectId.js:156:13) 在ObjectId.SchemaType.applySetters(D:\projects\cmscart\node\u modules\mongoose\lib\SchemaType.js:763:12) 在ObjectId.SchemaType.\u castForQuery(D:\projects\cmscart\node\u modules\mongoose\lib\SchemaType.js:1166:15) 在ObjectId.SchemaType.castForQuery(D:\projects\cmscart\node\u modules\mongoose\lib\SchemaType.js:1156:15) 位于ObjectId.SchemaType.castforqueryrapper(D:\projects\cmscart\node\u modules\mongoose\lib\SchemaType.js:1135:15) at cast(D:\projects\cmscart\node\u modules\mongoose\lib\cast.js:306:32) 在model.Query.Query.cast(D:\projects\cmscart\node\u modules\mongoose\lib\Query.js:4024:12) 位于model.Query.Query.\u castConditions(D:\projects\cmscart\node\u modules\mongoose\lib\Query.js:1690:10) 在model.Query.Query.\u findOne(D:\projects\cmscart\node\u modules\mongoose\lib\Query.js:1926:8) 位于process.nextTick(D:\projects\cmscart\node\u modules\kareem\index.js:369:33) at_combinedTickCallback(内部/流程/下一步勾选js:132:7) 在进程中。_tick回调(内部/process/next_tick.js:181:9) 消息:“对模型“页面”的路径“_id”处的值“5be86bf8170c2c22f8bb93a6”强制转换为ObjectId失败, 名称:“卡斯特罗”, stringValue:'5BE86BF8170C22F8BB93A6', 种类:“ObjectId”, 值:“5be86bf8170c2c22f8bb93a6”, 路径:“\u id”, 原因:未定义, 型号: {[功能:模型] hooks:Kareem{{u pres:[Object],{u posts:[Object]}, 基数: 猫鼬{ 连接:[数组], 模型:[对象], modelSchemas:[对象], o