2017-11-16 5 views
0

Ich habe den folgenden Code, der mir einen Fehler verursacht Angabe kann nicht lesen Eigenschaft ‚Teilzeichenfolge‘ undefinierterKann nicht Eigentum ‚Teilzeichenfolge‘ undefinierter

 <div class="extra"> 
     <p><%- blog.body.substring(0, 120) %> ... </p> 
     <a href="/blogs/<%= blog._id %>">Read More</a> 
     </div> 

jedoch der Fehler auf meiner index.js Seite auftreten wird nur wenn neuer Inhalt zur Seite hinzugefügt wird, nicht zum vorhandenen Inhalt. Ich benutze Express auf dem Backend. Die Veränderung, die ich gemacht habe, war

router.post("/blogs", isLoggedIn, function(req, res){ 
    // create blog 
    req.body.blog.body = req.sanitize(req.body.blog.body); 
    Blog.create(req.body.blog, function(err, newBlog){ 
     if(err){ 
      res.render("blogs/new"); 
     } else { 
      //then, redirect to the index 
      res.redirect("/blogs"); 
     } 
    }); 
}); 

dieser diese

// CREATE ROUTE 
router.post("/blogs", isLoggedIn, function(req, res){ 
    var title = req.body.title; 
    var image = req.body.image; 
    var description = req.body.description; 
    var author = { 
     id: req.user._id, 
     username: req.user.username 
    } 
    var blogPost = {title: title, image: image, description: description, author: author} 
    req.body.blog.body = req.sanitize(req.body.blog.body); 
    Blog.create(blogPost, function(err, newBlog){ 
     if(err){ 
      res.render("blogs/new"); 
     } else { 
      //then, redirect to the index 
      res.redirect("/blogs"); 
+0

Die Vorlage-Engine ist EJS –

+0

Ihr Blog.body Prop ist emty/undefined nichts mit zu arbeiten. Stellen Sie sicher, dass es die Zeichenfolge hat –

Antwort

0

Check-out Sie Daten Methode zu machen passieren sollte es in Template-Engine zugreifen, so dass Sie keine Daten dieser in Seite haben ist, warum Sie nicht definiert bekommen ...

http://expressjs.com/en/api.html#res.render

0

ich sehe nicht, wie die Änderung, die Sie beschrieben haben könnte dieses Problem verursacht, sieht es für mich wie diese Vorlage würde keine t haben entweder mit dem alten oder dem neuen Router-Code gearbeitet.

Die Variablen in einer Vorlage stammen von dem, was bekannt ist Einheimische. Eine Möglichkeit, die Einheimischen zu schaffen, ist es, sie in zu übergeben, wenn Aufruf render:

res.render("blogs/new", { 
    blog: req.body.blog 
}); 

Sie können auch Einheimische zuweisen mit res.locals oder app.locals. Es wäre nicht angemessen, app.locals hier zu verwenden, wie sie zwischen allen Anfragen geteilt werden würde, aber res.locals mit ein gangbarer Weg wäre:

res.locals.blog = req.body.blog; 

Die Einheimischen von Express zusammengeführt werden, bevor die Vorlage aufrufen, mit den übergebenen Einheimischen render hat Vorrang vor denen auf res.

Wenn der alte Router-Code mit dieser Vorlage funktionierte, wäre meine beste Schätzung, dass ein Code, den Sie nicht angegeben haben, den entsprechenden Wert auf res.locals gesetzt hat und Ihre Änderung hat das irgendwie kaputt gemacht.

Verwandte Themen