castError: Mongodb с express и ejs - PullRequest
0 голосов
/ 09 февраля 2020

Я использую express, Пн goose, E js в моем проекте.

код пытается найти любой другой документ с таким же названием, кроме документа с идентификатором, который был передан предыдущим представлением.

У меня есть эта проблема, я передаю Идентификатор объекта из предыдущего представления как:

<form >
...

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

</form>

, затем обработайте форму как:

router.post('/edit-page/:slug',[
    check('title', 'title must have a value').notEmpty(),
    check('content', 'content must have a value').notEmpty()

] ,(req, res)=>{

   ...

    // var id = mongoose.mongo.ObjectId(req.body.id);
    // var id = JSON.parse(req.body.id);
    var id = req.body.id;

  ... 

   PageModel.findOne({slug: slug, _id:{ $ne: id }}).then((page)=>{
       if(page){
           req.flash('danger', 'page slug exsits, choose another slug');
           res.render('admin/edit-page/', {
            id: id
        });
       } else{
          ...
       }
   }).catch((err)=>{console.log(err)});

  ...
})

, если я использовал var id = mongoose.mongo.ObjectId(req.body.id), я получил:


  Error: Argument passed in must be a single string of 12 bytes or a string of 
   24 hex characters

если бы я использовал var id = JSON.parse(req.body.id);, я получил:

SyntaxError: Unexpected token f in JSON at position 3

если бы я оставил Id в таком виде, как var id = req.body.id я получил:

MongooseError [CastError]: Cast to ObjectId failed for value "5e3feaa56c68184ca6b97477 "  
at path "_id" for model "page"

есть подобные проблемы, но ни одна из их решения сработали.

...