Mongoose CastError(转换到 ObjectId 失败)

问题描述 投票:0回答:1

在 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\""
}

可能会出现什么问题?任何帮助将不胜感激

mongoose
1个回答
2
投票

它是这么说的;你尝试

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});

希望对您有帮助。如果没有,请评论。

© www.soinside.com 2019 - 2024. All rights reserved.