#node.js #mongoose
Вопрос:
Ошибка:
**CastError: Cast to ObjectId failed for value " 60b881468beb8518ace49e81" (type string) at path "_id" for model "Blog"**
at model.Query.exec (D:GitNodenode-crash-coursenode_modulesmongooselibquery.js:4473:21)
at model.Query.Query.then (D:GitNodenode-crash-coursenode_modulesmongooselibquery.js:4567:15)
at D:GitNodenode-crash-courseapp.js:84:6
at Layer.handle [as handle_request] (D:GitNodenode-crash-coursenode_modulesexpresslibrouterlayer.js:95:5)
at next (D:GitNodenode-crash-coursenode_modulesexpresslibrouterroute.js:137:13)
at Route.dispatch (D:GitNodenode-crash-coursenode_modulesexpresslibrouterroute.js:112:3)
at Layer.handle [as handle_request] (D:GitNodenode-crash-coursenode_modulesexpresslibrouterlayer.js:95:5)
at D:GitNodenode-crash-coursenode_modulesexpresslibrouterindex.js:281:22
at param (D:GitNodenode-crash-coursenode_modulesexpresslibrouterindex.js:354:14)
at param (D:GitNodenode-crash-coursenode_modulesexpresslibrouterindex.js:365:14)
at Function.process_params (D:GitNodenode-crash-coursenode_modulesexpresslibrouterindex.js:410:3)
at next (D:GitNodenode-crash-coursenode_modulesexpresslibrouterindex.js:275:10)
at logger (D:GitNodenode-crash-coursenode_modulesmorganindex.js:144:5)
at Layer.handle [as handle_request] (D:GitNodenode-crash-coursenode_modulesexpresslibrouterlayer.js:95:5)
at trim_prefix (D:GitNodenode-crash-coursenode_modulesexpresslibrouterindex.js:317:13)
at D:GitNodenode-crash-coursenode_modulesexpresslibrouterindex.js:284:7 {
messageFormat: undefined,
stringValue: '" 60b881468beb8518ace49e81"',
kind: 'ObjectId',
value: ' 60b881468beb8518ace49e81',
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 (D:GitNodenode-crash-coursenode_modulesbsonlibbsonobjectid.js:59:11)
at castObjectId (D:GitNodenode-crash-coursenode_modulesmongooselibcastobjectid.js:25:12)
at ObjectId.cast (D:GitNodenode-crash-coursenode_modulesmongooselibschemaobjectid.js:245:12)
at ObjectId.SchemaType.applySetters (D:GitNodenode-crash-coursenode_modulesmongooselibschematype.js:1105:12)
at ObjectId.SchemaType._castForQuery (D:GitNodenode-crash-coursenode_modulesmongooselibschematype.js:1583:15)
at ObjectId.SchemaType.castForQuery (D:GitNodenode-crash-coursenode_modulesmongooselibschematype.js:1573:15)
at ObjectId.SchemaType.castForQueryWrapper (D:GitNodenode-crash-coursenode_modulesmongooselibschematype.js:1550:20)
at cast (D:GitNodenode-crash-coursenode_modulesmongooselibcast.js:331:32)
at model.Query.Query.cast (D:GitNodenode-crash-coursenode_modulesmongooselibquery.js:4912:12)
at model.Query.Query._castConditions (D:GitNodenode-crash-coursenode_modulesmongooselibquery.js:1954:10)
at model.Query.<anonymous> (D:GitNodenode-crash-coursenode_modulesmongooselibquery.js:2211:8)
at model.Query._wrappedThunk [as _findOne] (D:GitNodenode-crash-coursenode_modulesmongooselibhelpersquerywrapThunk.js:16:8)
at D:GitNodenode-crash-coursenode_moduleskareemindex.js:370:33
at processTicksAndRejections (internal/process/task_queues.js:75:11),
valueType: 'string'
}
Мой app.js код
app.get('/blogs/:id',(req,res) =>{
// console.log(req.params.id);
const id = req.params.id;
Blog.findById(id)
.then((result) =>{
res.render('details',{blog:result,title:'Blog Details'})
// console.log(result);
})
.catch((err) =>{
console.log(err);
})
})
**And details.ejs code**
<title>Document | <%= title %></title>
</head>
<body>
<%- include('../partials/nav.ejs') %>
<div>
<h2>Hellow World</h2>
</div>
<div class="blogs">
<h1>Blogs</h1>
<h3 class="title"> <%= blog.title %> </h3>
<p class="snippet"> <%= blog.snippet %></p>
</a>
</div>
Как это можно исправить ?
Ответ №1:
Вы можете понять, что происходит, прочитав журнал
Cast to ObjectId failed for value " 60b881468beb8518ace49e81" (type string) at path "_id" for model "Blog"**
Код, связанный:
const id = req.params.id;
Blog.findById(id)
В приведенном выше коде вы получаете идентификатор из параметров запроса и используете его для поиска блога. Исходя из ошибки, я думаю, что значение id
равно " 60b881468beb8518ace49e81"
. В начале у него есть дополнительное место. Мангуст не может «преобразовать» его в допустимый идентификатор объекта, что ожидается findById
методом. Отсюда и ошибка.
Я думаю, что нам нужно удалить все ненужные пробелы из строки, попробуйте это
const id = req.params.id.trim(); // call trim method to remove extra space at the beginning/end of the string
Blog.findById(id)
Комментарии:
1. Эй, спасибо за ответ. Я пробую много способов исправить это, я не видел дополнительного места в начале. теперь я все исправлю. Спасибо.
2. Если вы сочтете ответ полезным, вы можете отметить его как принятый. Спасибо.
3. как я могу это сделать?
4.
You can accept one answer (if it helps you) by click on big gray check button on its left side. If you wish you can add 10 points to any author of any good answer by click upper gray triangle