Node.js de mongodb ile id üzerinden veri almaya çalışırken sebebini bulamadığım bir hata alıyorum
3 yıl önce @muhas tarafından soruldu · mongodb, nodejsNerede hata yapıyorum ?
Önce URL'ime id'yi bu şekilde ekliyorum :
<ul>
<% blogs.forEach((blog) => { %>
<li>
<a href="/blog/<%=blog._id%>"><%=blog.title%></a>
<p><%=blog.short %></p>
</li>
<% }) %>
</ul>
id'yi ekledikten sonra URL'imi bu şekilde yakalıyorum :
app.get("/blog/:id",(req,res)=>{
const id = req.params.id;
Blog.findById(id)
.then((result) => res.render("blog",{ blog: result , title: "Detay"}))
.catch((err) => console.log(err));
});
ve render ettiğim sayfada değişkenleri bu şekilde kullanıyorum :
<section>
<h1><%=blog.title%></h1>
<p><%=blog.long%></p>
</section>
fırlatılan hata ise şöyle :
CastError: Cast to ObjectId failed for value "style.css" (type string) at path "_id" for model "Blog"
at model.Query.exec (C:\Users\muham\OneDrive\Masaüstü\nodeblog\node_modules\mongoose\lib\query.js:4540:21)
at model.Query.Query.then (C:\Users\muham\OneDrive\Masaüstü\nodeblog\node_modules\mongoose\lib\query.js:4639:15)
at C:\Users\muham\OneDrive\Masaüstü\nodeblog\app.js:28:4
at Layer.handle [as handle_request] (C:\Users\muham\OneDrive\Masaüstü\nodeblog\node_modules\express\lib\router\layer.js:95:5)
at next (C:\Users\muham\OneDrive\Masaüstü\nodeblog\node_modules\express\lib\router\route.js:137:13)
at Route.dispatch (C:\Users\muham\OneDrive\Masaüstü\nodeblog\node_modules\express\lib\router\route.js:112:3)
at Layer.handle [as handle_request] (C:\Users\muham\OneDrive\Masaüstü\nodeblog\node_modules\express\lib\router\layer.js:95:5)
at C:\Users\muham\OneDrive\Masaüstü\nodeblog\node_modules\express\lib\router\index.js:281:22
at param (C:\Users\muham\OneDrive\Masaüstü\nodeblog\node_modules\express\lib\router\index.js:354:14)
at param (C:\Users\muham\OneDrive\Masaüstü\nodeblog\node_modules\express\lib\router\index.js:365:14) {
messageFormat: undefined,
stringValue: '"style.css"',
kind: 'ObjectId',
value: 'style.css',
path: '_id',
reason: TypeError: Argument passed in must be a Buffer or string of 12 bytes or a string of 24 hex characters
at new ObjectId (C:\Users\muham\OneDrive\Masaüstü\nodeblog\node_modules\bson\lib\objectid.js:61:23)
at castObjectId (C:\Users\muham\OneDrive\Masaüstü\nodeblog\node_modules\mongoose\lib\cast\objectid.js:25:12)
at ObjectId.cast (C:\Users\muham\OneDrive\Masaüstü\nodeblog\node_modules\mongoose\lib\schema\objectid.js:246:12)
at ObjectId.SchemaType.applySetters (C:\Users\muham\OneDrive\Masaüstü\nodeblog\node_modules\mongoose\lib\schematype.js:1122:12)
at ObjectId.SchemaType._castForQuery (C:\Users\muham\OneDrive\Masaüstü\nodeblog\node_modules\mongoose\lib\schematype.js:1553:15)
at ObjectId.SchemaType.castForQuery (C:\Users\muham\OneDrive\Masaüstü\nodeblog\node_modules\mongoose\lib\schematype.js:1543:15)
at ObjectId.SchemaType.castForQueryWrapper (C:\Users\muham\OneDrive\Masaüstü\nodeblog\node_modules\mongoose\lib\schematype.js:1520:20)
at cast (C:\Users\muham\OneDrive\Masaüstü\nodeblog\node_modules\mongoose\lib\cast.js:338:32)
at model.Query.Query.cast (C:\Users\muham\OneDrive\Masaüstü\nodeblog\node_modules\mongoose\lib\query.js:4963:12)
at model.Query.Query._castConditions (C:\Users\muham\OneDrive\Masaüstü\nodeblog\node_modules\mongoose\lib\query.js:2055:10),
valueType: 'string'
}
Cevaplar
anladığım kadarıyla style.css'i de blog içerisinde yüklemeye çalışıyor arkaplanda giden istek "blog/style.css" olduğu için bunu engellemek için style.css'i yüklediğin yerde
href="style.css"
yerine
href="/style.css"
yapabilirsin yada daha kesin bir sonuç için başına tam adresi eklemen daha sağlıklı olacaktır
href="http://localhost:3000/style.css"