EJS隐藏输入传递ObjectId触发BSON CastError问题排查
解决MongoDB Cast to ObjectId失败的BSONError问题
问题原因
你在EJS隐藏输入框的value属性里,给<%= result._id %>前后加了空格,导致提交到后端的userid是带前后空格的字符串。MongoDB的ObjectId要求是纯净的十六进制字符串,带空格的字符串无法被正确转换,所以抛出了BSONError。
解决方法
- 修正EJS隐藏框代码
直接去掉value里的多余空格,确保传递的是纯净的ObjectId字符串:
<input type="hidden" name="userid" value="<%= result._id %>">
- 后端额外容错处理(可选)
如果担心前端可能出现其他意外空格,可以在formController接收参数时先去除前后空格:
const userId = req.body.userid.trim(); // 再用处理后的userId创建Form数据
这样就能避免Cast to ObjectId的转换错误,同时保证数据正常存入数据库。
内容的提问来源于stack exchange,提问作者Riya Bhanvadia
相关产品推荐
相关产品推荐

