在poster中测试我的api路由时,我得到了这个错误"值"转换为ObjectId失败;632aa0c8930ca0dec7d042b\n";(类型字符串(在路径"处_id";对于模型";用户"&";。
以下是更新api的控制器和路由部分:
//路由
app.put("/api/users/:id",授权,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)
}
}
以下是poster中显示的错误:{"字符串值":"quot;632aa0c8930ca0dec7d042b\n"&">
"valueType":"字符串">
"种类":"ObjectId">
"值":"632aa0c8930ca0dec7d042b">
"路径":"_id">
"原因":{},
"name":"CastError">
"消息":"值"转换为ObjectId失败;632aa0c8930ca0dec7d042b\n";(类型字符串(在路径"处_id";对于模型";用户"}
会出什么问题?如有任何帮助,将不胜感激
它说;你试图找到ById。Id必须是ObjectId。但你的价值是字符串。
要解决它,您需要使用;
mongoose.Types.ObjectId(req.params.id)
const updatedUser = await User.findByIdAndUpdate(mongoose.Types.ObjectId(req.params.id), req.body, {new:true, runValidators:true})
试试这个,如果";\n〃;造成问题的是,您需要将数据作为ObjectId('632aa0c8930ca0dec7d042b'(这样的字符串发送。
如果它总是带有";\n〃;因此您需要将其拆分,然后将其写入findByIdAndUpdate作为;
const parameter =req.params.id.split('')[0]
User.findByIdAndUpdate(mongoose.Types.ObjectId(parameter), req.body, {new:true, runValidators:true})
我希望这对你有帮助。如果没有,请评论。