在 Postman 中测试我的 API 路由时;
我收到此错误:
"Cast to ObjectId failed for value \"632aa0c8930ca0decc7d042b\\n\" (type string) at path \"_id\" for model \"User\""
这里是更新API的控制器和路由部分:
路线:
app.put("/api/users/:id", authorization, UserController.updateUser);
控制器:
updateUser: async (req, res) => {
try {
const updatedUser = await User.findByIdAndUpdate(req.params.id, req.body, {new:true, runValidators:true});
res.status(200).json(updatedUser);
} catch(err) {
res.status(500).json(err)
}
}
这是 Postman 中显示的错误:
{
"stringValue": "\"632aa0c8930ca0decc7d042b\\n\"",
"valueType": "string",
"kind": "ObjectId",
"value": "632aa0c8930ca0decc7d042b\n",
"path": "_id",
"reason": {},
"name": "CastError",
"message": "Cast to ObjectId failed for value \"632aa0c8930ca0decc7d042b\\n\" (type string) at path \"_id\" for model \"User\""
}
可能会出现什么问题?任何帮助将不胜感激
它是这么说的;你尝试
findById
并且 Id 变量必须是 ObjectId
。但你的值是一个字符串。
要解决这个问题,您需要使用:
mongoose.Types.ObjectId(req.params.id);
const updatedUser = await User.findByIdAndUpdate(mongoose.Types.ObjectI;d(req.params.id), req.body, {new:true, runValidators:true})
试试这个,如果” “ 产生了问题,您需要将数据作为字符串发送,如
ObjectId ('632aa0c8930ca0decc7d042b')
。
如果它总是带有” “所以你需要将其拆分然后写入findByIdAndUpdate为:
const parameter = req.params.id.split('\')[0];
const updatedUser = await User.findByIdAndUpdate(mongoose.Types.ObjectId(parameter), req.body, {new:true, runValidators:true});
希望对您有帮助。如果没有,请评论。