【发布时间】:2020-02-13 22:43:11
【问题描述】:
我有一个 nodejs express 路由器,路由如下:
router.get("/book/:id", function(req, res){
Book.findById(req.params.id).then(function(book){
if (book) {
res.json(book);
} else {
res.send("Book Not found");
}
}).catch(function(err){
if (err) {
console.log(err);
res.send(err);
throw err;
}
})
})
当我使用邮递员测试路线时,我总是得到这个错误:
{ [CastError: Cast to ObjectId failed for value "5e441654a8b2e25bfa3d4507" at path "_id" for model "Book"]
stringValue: '"5e441654a8b2e25bfa3d4507"',
kind: 'ObjectId',
value: '5e441654a8b2e25bfa3d4507',
path: '_id',
reason: [TypeError: hex is not a function],
message: 'Cast to ObjectId failed for value "5e441654a8b2e25bfa3d4507" at path "_id" for model "Book"',
name: 'CastError',
model: Model { Book } }
findById 命令似乎请求的是 mongoose objectId 类型而不是字符串 我尝试了在线解决方案(来自堆栈和其他社区),我发现类似于:
ObjectId = mongoose.Types.ObjectId
ObjectId = mongoose.Schema.ObjectId
ObjectId = mongoose.mongo.ObjectId
然后 该解决方案建议执行以下操作:
id = new ObjectId(req.params.id)
Book.findById(id)
仍然无法处理 hex is not a function 错误
有没有人遇到这个错误并设法修复它? 请注意,我正在使用:
mongodb cloud hosting, version 4
mongoose 5.8.11
nodejs 4.2.6
如果有帮助,这是我的图书模型:
const schema = new mongoose.Schema({
title: {
type: String,
require: true
},
author: {
type: String,
require: true
},
numberPages: {
type: Number,
require: false
},
publisher: {
type: String,
require: false
}
});
module.exports = mongoose.model('Book', schema);
【问题讨论】: