Mongoose强制转换错误(强制转换为ObjectId失败)

4smxwvx5  于 2022-11-13  发布在  Go
关注(0)|答案(1)|浏览(253)

在postman中测试我的api路由时,我收到此错误“对于模型“User”的路径“_id”处的值“632aa0c8930ca0decc7d042b\n”(类型字符串),转换为ObjectId失败"。
下面是更新API的控制器和路由部分:
//路由
/api/users/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//控制器
更新用户:异步(请求,资源)=〉{

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中显示的错误:{“字符串值”:““632 aa 0 c8930 ca 0 decc 7 d 042 b”",请输入您的密码,
“值类型”:“字符串”,
“种类”:“对象ID”,
“数值”:“632 aa 0 c8930 ca 0 decc 7 d 042 b”,
“路径”:“_id”,
“原因”:{},
“名称”:“转换错误”,
“消息”:“在模型“User”得路径“_id”处,将值“632aa0c8930ca0decc7d042b\n”(类型字符串)强制转换为ObjectId失败”}
会有什么问题吗?任何帮助都将不胜感激

eyh26e7m

eyh26e7m1#

它说;您尝试查找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('632 aa 0 c8930 ca 0 decc 7 d 042 b')。
如果它总是带有“\n”,那么您需要将其拆分,然后将以下内容写入findByIdAndUpdate:

const parameter =req.params.id.split('\')[0]
User.findByIdAndUpdate(mongoose.Types.ObjectId(parameter), req.body, {new:true, runValidators:true})

希望对你有帮助,如果没有,请批评指正。

相关问题