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, nodejs

Nerede 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'

}

1

Cevaplar

Doğru Cevap
1

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"



Yanıtla
3 yıl önce

Cevap Yaz