У меня есть 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 запрашивает тип mon goose 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);