Я использую 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"
есть подобные проблемы, но ни одна из их решения сработали.