Я использую шаблон e js, где каждое представление начинается с
<%- include('partials/header') %>
<link rel="stylesheet" href="css/styles.css">
</head>
с одной страницы У меня есть это:
<a class="btn btn-sm btn-outline-secondary col-4 mr-2 p-0" href="/reservation/<%=reservation._id%>"> Edit</a>
Который попадает в этот маршрут для рендеринга страница с предварительным заполнением полей:
router.route('/:id').get((req, res) => {
Reservation.findById(req.params.id, (err, reservation) => {
if (err) {
console.log(err);
return res.render("reservation", {error: err})
} else {
if (reservation) {
console.log("reservation IF FOUND BLOCK")
res.render("edit-reservation", {reservation});
console.log("PASSED TO RENDER")
}
}
}); //Reservation.find end
});
Он отображает страницу с переданными значениями и предварительно заполненными полями, но это как будто игнорирует часть, и я получаю эту ошибку:
reservation IF FOUND BLOCK
MongooseError [CastError]: Cast to ObjectId failed for value "jquery.js" at path "_id" for model "Reservation"
at new CastError (C:\Users\vince\Desktop\alpha-fh\node_modules\mongoose\lib\error\cast.js:29:11)
at model.Query.exec (C:\Users\vince\Desktop\alpha-fh\node_modules\mongoose\lib\query.js:4341:21)
at model.Query.Query.findOne (C:\Users\vince\Desktop\alpha-fh\node_modules\mongoose\lib\query.js:2216:8)
at Function.findOne (C:\Users\vince\Desktop\alpha-fh\node_modules\mongoose\lib\model.js:2214:13)
at Function.findById (C:\Users\vince\Desktop\alpha-fh\node_modules\mongoose\lib\model.js:2140:15)
at C:\Users\vince\Desktop\alpha-fh\routes\reservation-routes.js:51:15
at Layer.handle [as handle_request] (C:\Users\vince\Desktop\alpha-fh\node_modules\express\lib\router\layer.js:95:5)
at next (C:\Users\vince\Desktop\alpha-fh\node_modules\express\lib\router\route.js:137:13)
at Route.dispatch (C:\Users\vince\Desktop\alpha-fh\node_modules\express\lib\router\route.js:112:3)
at Layer.handle [as handle_request] (C:\Users\vince\Desktop\alpha-fh\node_modules\express\lib\router\layer.js:95:5)
at C:\Users\vince\Desktop\alpha-fh\node_modules\express\lib\router\index.js:281:22
at param (C:\Users\vince\Desktop\alpha-fh\node_modules\express\lib\router\index.js:354:14)
at param (C:\Users\vince\Desktop\alpha-fh\node_modules\express\lib\router\index.js:365:14)
at Function.process_params (C:\Users\vince\Desktop\alpha-fh\node_modules\express\lib\router\index.js:410:3)
at next (C:\Users\vince\Desktop\alpha-fh\node_modules\express\lib\router\index.js:275:10)
at Function.handle (C:\Users\vince\Desktop\alpha-fh\node_modules\express\lib\router\index.js:174:3) {
message: 'Cast to ObjectId failed for value "jquery.js" at path "_id" for model "Reservation"',
name: 'CastError',
messageFormat: undefined,
stringValue: '"jquery.js"',
kind: 'ObjectId',
value: 'jquery.js',
path: '_id',
reason: Error: Argument passed in must be a single String of 12 bytes or a string of 24 hex characters
at new ObjectID (C:\Users\vince\Desktop\alpha-fh\node_modules\bson\lib\bson\objectid.js:59:11)
at castObjectId (C:\Users\vince\Desktop\alpha-fh\node_modules\mongoose\lib\cast\objectid.js:25:12)
at ObjectId.cast (C:\Users\vince\Desktop\alpha-fh\node_modules\mongoose\lib\schema\objectid.js:267:12)
at ObjectId.SchemaType.applySetters (C:\Users\vince\Desktop\alpha-fh\node_modules\mongoose\lib\schematype.js:1031:12)
at ObjectId.SchemaType._castForQuery (C:\Users\vince\Desktop\alpha-fh\node_modules\mongoose\lib\schematype.js:1459:15)
at ObjectId.SchemaType.castForQuery (C:\Users\vince\Desktop\alpha-fh\node_modules\mongoose\lib\schematype.js:1449:15)
at ObjectId.SchemaType.castForQueryWrapper (C:\Users\vince\Desktop\alpha-fh\node_modules\mongoose\lib\schematype.js:1428:15)
at cast (C:\Users\vince\Desktop\alpha-fh\node_modules\mongoose\lib\cast.js:317:32)
at model.Query.Query.cast (C:\Users\vince\Desktop\alpha-fh\node_modules\mongoose\lib\query.js:4730:12)
at model.Query.Query._castConditions (C:\Users\vince\Desktop\alpha-fh\node_modules\mongoose\lib\query.js:1861:10)
at model.Query.<anonymous> (C:\Users\vince\Desktop\alpha-fh\node_modules\mongoose\lib\query.js:2118:8)
at model.Query._wrappedThunk [as _findOne] (C:\Users\vince\Desktop\alpha-fh\node_modules\mongoose\lib\helpers\query\wrapThunk.js:16:8)
at C:\Users\vince\Desktop\alpha-fh\node_modules\kareem\index.js:369:33
at processTicksAndRejections (internal/process/task_queues.js:75:11)
}
У меня есть console.logs, чтобы увидеть, где возникает ошибка, и похоже, что это после рендеринга. Мне особенно любопытна эта часть:
message: 'Cast to ObjectId failed for value "jquery.js" at path "_id" for model "Reservation"',
name: 'CastError',
messageFormat: undefined,
stringValue: '"jquery.js"',
kind: 'ObjectId',
value: 'jquery.js',
path: '_id',
reason: Error: Argument passed in must be a single String of 12 bytes or a string of 24 hex characters
Заранее спасибо за помощь.