mongoose findByIdAndRemove导致错误

waxmsbnn  于 2022-11-13  发布在  Go
关注(0)|答案(3)|浏览(148)

任何人都可以请帮助点为什么 Mongoose findByIdAndRemove在删除路线下面...

//DELETE Route
app.delete("/blogs/:id", function(req, res){
  //Destroy blog
  Blog.findByIdAndRemove(req.params.id, function(err){
    if(err){
      res.send(err);
    } else {
      res.redirect("/blogs");
    }
  });
});

...生成以下错误:

message: "Cast to ObjectId failed for value "5a6a8f967c9a190507b03433 " at path "_id" for model "Blog"",
name: "CastError",
stringValue: ""5a6a8f967c9a190507b03433 "",
kind: "ObjectId",
value: "5a6a8f967c9a190507b03433 ",
path: "_id"

非常感谢期待你的帮助。

2ul0zpep

2ul0zpep1#

问题是从客户机发送一个16个字符长的String,而方法findOneByIdAndRemove需要一个ObjectId,这样做可以消除这个问题,

var mongoose = require('mongoose'); //remove it as you might already it
var ObjectId = mongoose.Types.ObjectId;

app.delete("/blogs/:id", function(req, res){
  //Destroy blog
  Blog.findByIdAndRemove(ObjectId(req.params.id), function(err){
    if(err){
      res.send(err);
    } else {
      res.redirect("/blogs");
    }
  });
});

此外,请确保_id的长度为16个字符,两侧不允许有空格。

6vl6ewon

6vl6ewon2#

非常感谢@vicbyte和Nilesh Singh的贡献。
实际上,代码失败是由于id结尾的空格:“5a 6a 8 f967 c9 a190507 b 03433“。空格来自发出DELETE命令的表单:

<form id="delete" action="/blogs/<%= blog.id %> ?_method=DELETE" Method ="POST">
  <button class = "ui red basic button">Delete</button>
</form>

修改如下表格...

<form id="delete" action="/blogs/<%= blog.id %>?_method=DELETE" Method ="POST">
  <button class = "ui red basic button">Delete</button>
</form>

...已清除错误。

bbuxkriu

bbuxkriu3#

请使用异步等待。例如:

async function(req,res) {
  await Blog.findByIdAndRemove();
}

相关问题