首页 > 解决方案 > 使用 body-parser 时 findByIdAndRemove 不起作用

问题描述

app.post("/delete", (req, res) => {
  const deleteItem = req.body.checkbox;
  Item.findByIdAndRemove(deleteItem, (err) => {
    if (!err) console.log("deleted succesfully");
    else console.log(err);
  });
  res.redirect("/");
});

这里 deleteItem 在控制台日志记录时返回字符串,但是当我尝试 deleteItem 时出现以下错误

MongooseError [CastError]: Cast to ObjectId failed for value "61861e5c0bb4650c066f9e60 " at path "_id" for model "Item"
    at new CastError (D:\College\web dev\todolist-v2\node_modules\mongoose\lib\error\cast.js:27:11)
    at ObjectId.cast (D:\College\web dev\todolist-v2\node_modules\mongoose\lib\schema\objectid.js:158:13)
    at ObjectId.SchemaType._castForQuery (D:\College\web dev\todolist-v2\node_modules\mongoose\lib\schematype.js:1088:15)
    at ObjectId.castForQuery (D:\College\web dev\todolist-v2\node_modules\mongoose\lib\schema\objectid.js:198:15)
    at ObjectId.SchemaType.castForQueryWrapper (D:\College\web dev\todolist-v2\node_modules\mongoose\lib\schematype.js:1045:15)
    at cast (D:\College\web dev\todolist-v2\node_modules\mongoose\lib\cast.js:275:32)
    at model.Query.Query.cast (D:\College\web dev\todolist-v2\node_modules\mongoose\lib\query.js:3305:12)
    at model.Query.Query._castConditions (D:\College\web dev\todolist-v2\node_modules\mongoose\lib\query.js:1295:10)
    at model.Query.Query._findOneAndRemove (D:\College\web dev\todolist-v2\node_modules\mongoose\lib\query.js:2251:8)
    at D:\College\web dev\todolist-v2\node_modules\kareem\index.js:250:8
    at D:\College\web dev\todolist-v2\node_modules\kareem\index.js:23:7
    at processTicksAndRejections (node:internal/process/task_queues:78:11) {
  stringValue: '"61861e5c0bb4650c066f9e60 "',
  kind: 'ObjectId',
  value: '61861e5c0bb4650c066f9e60 ',
  path: '_id',
  reason: undefined,

标签: javascriptmongoose

解决方案


如果您检查异常堆栈跟踪:

Cast to ObjectId failed for value "61861e5c0bb4650c066f9e60 "

您在 ID 末尾有一个额外的空格。可能这就是问题所在,因为作为 ObjectID 传递的参数必须是 12 个字节的字符串或 24 个十六进制字符的字符串。在这种情况下,它是 25 个字符。


推荐阅读