res.render вызывает [CastError] - PullRequest
0 голосов
/ 16 июня 2020

Я использую шаблон 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 

Заранее спасибо за помощь.

...