首页 文章

CastError:对于模型“Page”,路径为“_id”的值为“5be86bf8170c2c22f8bb93a6”的CastI为ObjectId失败

提问于
浏览
2

我正在用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"
  }
}

edit_page.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')  %>

admin_pages.js

/* 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:在ObjectId的新CastError(D:\ projects \ cmscart \ node_modules \ mongoose \ lib \ error \ cast.js:29:11)中,对于模型“Page”的路径“_id”处的值为“5be86bf8170c2c22f8bb93a6”的CastError:ObjectId失败 . Object(D:\ projects \ cmscart \ node_modules \ mongoose \ lib \ schema \ objectid.js:156:13)at ObjectId.SchemaType.applySetters(D:\ projects \ cmscart \ node_modules \ mongoose \ lib \ schematype.js: 763:12)在ObjectId.SchemaType.castForQuery(D:\ projects \ cmscart \ node_modules \ mongoose \)的ObjectId.SchemaType._castForQuery(D:\ projects \ cmscart \ node_modules \ mongoose \ lib \ schematype.js:1166:15) lib \ schematype.js:1156:15)at CastI上的ObjectId.SchemaType.castForQueryWrapper(D:\ projects \ cmscart \ node_modules \ mongoose \ lib \ schematype.js:1135:15)(D:\ projects \ cmscart \ node_modules \在model.Query.Query._castConditions的model.Query.Query.cast(D:\ projects \ cmscart \ node_modules \ mongoose \ lib \ query.js:4024:12)中的mongoose \ lib \ cast.js:306:32) (D:\ projects \ cmscart \ node_modules \ mongoose \ lib \ query.js:1690:10)at model.Query.Query._fin dOne(D:\ projects \ cmscart \ node_modules \ mongoose \ lib \ query.js:1926:8)位于_combinedTickCallback的process.nextTick(D:\ projects \ cmscart \ node_modules \ kareem \ index.js:369:33) internal / process / next_tick.js:132:7)at process.tickCallback(internal / process / next_tick.js:181:9)消息:'对于模型“页面,在路径”id“处,为对象”5be86bf8170c2c22f8bb93a6“转换为ObjectId失败“',name:'CastError',stringValue:'”5 kind86bf8170c2c22f8bb93a6“',kind:'ObjectId',value:'5be86bf8170c2c22f8bb93a6',path:' id',reason:undefined,model:{[Function:model] hooks:Kareem {pres:[Object], post:[Object]},base:Mongoose {connections:[Array],models:[Object],modelSchemas:[Object],options:[Object], popralize:[Function:pluralize], plugins:[Array]},modelName:'Page',model:[Function:model],db:NativeConnection {base:[Object],collections:[Object],models:[Object],config:[Object],replica :false,options:null,otherDbs:[],relatedDbs:{},states:[Object],_readyState:1, closeCalled:false,hasOpened:true,'$ internalEmitter':[Object], listening:false,connectionOptions:[Object],name:'cmscart',host:'localhost',port:27017,user:null,pass:null ,client:[Object],'$ initialConnection':[Object], event:[Object], eventscount:1,db:[Object]},discriminators:undefined,'$ appliedMethods':true,'$ appliedHooks':true ,schema:Schema {obj:[Object],paths:[Object],aliases:{},subpaths:{},virtuals:[Object],singleNestedPaths:{},nested:{},inherits:{},callQueue: [],indexes:[],方法:{},methodOptions:{},statics:{},tree:[Object],query:{},childSchemas:[],plugins:[Array],'$ id': 1,s:[Object], userProvidedOptions:{},options:[Object],'$ globalPluginsApplied':true},collection:NativeCollection {collection:[Object],opts:[Object],name:'pages',collectionName :'pages',conn:[Object],queue:[],buffer:false,emitter:[Object]},Query:{[Function] base:[Object]},'$ __ insertMany':[Function],' $ init':P romise {[Circular]},'$ caught':true}} {CastError:对于新版CastError中模型“Page”的路径“_id”,对于“5be86bf8170c2c22f8bb93a6”的值,“转换为ObjectId”失败(D:\ projects \ cmscart \ node_modules \在ObjectId.SchemaType.applySetters(D)的ObjectId.cast(D:\ projects \ cmscart \ node_modules \ mongoose \ lib \ schema \ objectid.js:156:13)中的mongoose \ lib \ error \ cast.js:29:11) :\ projects \ cmscart \ node_modules \ mongoose \ lib \ schematype.js:763:12)在ObjectId的ObjectId.SchemaType._castForQuery(D:\ projects \ cmscart \ node_modules \ mongoose \ lib \ schematype.js:1166:15) ObjectId.SchemaType.castForQueryWrapper中的.SchemaType.castForQuery(D:\ projects \ cmscart \ node_modules \ mongoose \ lib \ schematype.js:1156:15)(D:\ projects \ cmscart \ node_modules \ mongoose \ lib \ schematype.js: 1135:15)在cast.D():D:\ projects \ cmscart \ node_modules \ mongoose \ lib \ query.js:4024:12)在model.Query.Query._castConditions(D:\ projects \ cmscart \ node_modules \ mongoose \ li) b \ query.js:1690:10)在process.nextTick(D:\ projects \)的model.Query.Query._findOne(D:\ projects \ cmscart \ node_modules \ mongoose \ lib \ query.js:1926:8) cmscart \ node_modules \ kareem \ index.js:369:33)在process._tickCallback(internal / process / next_tick.js:181:9)的_combinedTickCallback(internal / process / next_tick.js:132:7)消息:'Cast对于模型“Page”',路径“id”处的值为“5be86bf8170c2c22f8bb93a6”的ObjectId失败,名称:'CastError',stringValue:'“5be86bf8170c2c22f8bb93a6”',kind:'ObjectId',值:'5be86bf8170c2c22f8bb93a6',路径:'id ”,reason:undefined,model:{[Function:model] hooks:Kareem {pres:[Object], postts:[Object]},base:Mongoose {connections:[Array],models:[Object],modelSchemas:[Object] ,options:[Object], popralize:[Function:pluralize],plugins:[Array]},modelName:'Page',model:[Function:model],db:NativeConnection {base:[Object],collections:[Object ],models:[Object],config:[Object],replica:false,options:null,otherDbs:[],relatedDbs:{},states:[Object],readyState:1,closeCalled:false, hasOpened:true, '$ internalEmitter':[Object], listening:false,connectionOptions:[Object],name:'cmscart',host:'localhost',port:27017,user:null,pass:null,client:[Object],' $ initialConnection':[Object], event:[Object], eventscount:1,db:[Object]},discriminators:undefined,'$ appliedMethods':true,'$ appliedHooks':true,schema:Schema {obj:[对象],路径:[Object],别名:{},子路径:{},virtuals:[Object],singleNestedPaths:{},嵌套:{},继承: {},callQueue:[],indexes:[],方法:{},methodOptions:{},statics:{},tree:[Object],query:{},childSchemas:[],plugins:[Array], '$ id':1,s:[Object], userProvidedOptions:{},options:[Object],'$ globalPluginsApplied':true,_requiredpaths:[Array]},collection:NativeCollection {collection:[Object],opts: [Object],name:'pages',collectionName:'pages',conn:[Object],queue:[],buffer:false,emitter:[Object]},Query:{[Function] base:[Object]} ,'$ __ insertMany':[Function],'$ init':Promise {[Circular]},'$ caught':true}} {CastError:对于模型“路径为”_id“的值为”5be86bf8170c2c22f8bb93a6“的CastI转换为ObjectId失败在ObjectId.cast处的新CastError(D:\ projects \ cmscart \ node_modules \ mongoose \ lib \ error \ cast.js:29:11)中的页面(D:\ projects \ cmscart \ node_modules \ mongoose \ lib \ schema \ objectid .js:156:13)在ObjectId.SchemaType.applySetters(D:\ projects \ cmscart \ node_modules \ mongoose \ lib \ schematype.js:763:12)处于ObjectId.SchemaType._castForQuery(D:\ projects \ cms)在ObjectId.SchemaType.castForQueryWrapper的ObjectId.SchemaType.castForQuery(D:\ projects \ cmscart \ node_modules \ mongoose \ lib \ schematype.js:1156:15)中的cart \ node_modules \ mongoose \ lib \ schematype.js:1166:15) (D:\ projects \ cmscart \ node_modules \ mongoose \ lib \ schematype.js:1135:15)在cast(D:\ projects \ cmscart \ node_modules \ mongoose \ lib \ cast.js:306:32)中的model.Query .Query.cast(D:\ projects \ cmscart \ node_modules \ mongoose \ lib \ query.js:4024:12)在model.Query.Query._castConditions(D:\ projects \ cmscart \ node_modules \ mongoose \ lib \ query . js:1690:10)在process.nextTick(D:\ projects \ cmscart \ node_modules \)的model.Query.Query._findOne(D:\ projects \ cmscart \ node_modules \ mongoose \ lib \ query.js:1926:8) kareem \ index.js:369:33)在_combinedTickCallback(internal / process / next_tick.js:132:7)at process.tickCallback(internal / process / next_tick.js:181:9)消息:'强制转换为ObjectId失败对于模型“Page”',路径“id”处的值为“5be86bf8170c2c22f8bb93a6”,名称:'CastError',stringValue:'“5be86bf8170c2c22f8bb93a6” ',kind:'ObjectId',值:'5be86bf8170c2c22f8bb93a6',路径:' id',原因:未定义,型号:{[功能:模型]钩子:Kareem {pres:[Object], postts:[Object]},base :Mongoose {connections:[Array],models:[Object],modelSchemas:[Object],options:[Object], popralize:[Function:pluralize],plugins:[Array]},modelName:'Page',model: [功能:型号],db:NativeConnection {base:[Object],collections:[Object],models:[Object],config:[Object],replica:false,options:null,otherDbs:[],relatedDbs:{ },states:[Object],_readyState:1,closeCalled:false,hasOpened:true,'$ internalEmitter':[Object], listening:false,connectionOptions:[Object],name:'cmscart',host:'localhost' ,port:27017,user:null,pass:null,client:[Object],'$ initialConnection':[Object], event:[Object], eventscount:1,db:[Object]},discriminators:undefined,' $ appliedMethods':true,'$ appliedHooks':true,schema:Schema {obj:[Object],paths:[Object],aliases:{},subpaths :{},virtuals:[Object],singleNestedPaths:{},nested:{},inherits:{},callQueue:[],indexes:[],methods:{},methodOptions:{},statics:{}, tree:[Object],query:{},childSchemas:[],plugins:[Array],'$ id':1,s:[Object], userProvidedOptions:{},options:[Object],'$ globalPluginsApplied' :true,_requiredpaths:[Array]},collection:NativeCollection {collection:[Object],opts:[Object],name:'pages',collectionName:'pages',conn:[Object],queue:[],buffer :false,emitter:[Object]},Query:{[Function] base:[Object]},'$ __ insertMany':[Function],'$ init':Promise {[Circular]},'$ caught':true }}

1 回答

  • 0

    "5be86bf8170c2c22f8bb93a6 " 末尾有一个空格字符 . 你先尝试修剪它吗?

    在文件 D:\projects\cmscart\node_modules\kareem\index.js 第369行中使用 id.trim() 而不是 id 以及您正在使用的任何位置,或者您可以先在开头更正 id

相关问题