无法读取undefined的属性'substring'

时间:2017-11-16 22:16:32

标签: javascript html node.js ejs

我有以下代码导致我错误说明无法读取未定义的属性'substring'

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

但是,只有在将新内容添加到页面而不是现有内容时,我的index.js页面才会出现错误。我在后端使用快递。我所做的改变是

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");
        }
    });
});

到这个

// 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");

3 个答案:

答案 0 :(得分:0)

检查一下你应该将数据传递给渲染方法以在模板引擎中访问它,这样你就不会在页面中有任何数据这就是你未定义的原因......

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

答案 1 :(得分:0)

我不知道您所描述的更改是如何导致此问题的,我认为该模板无法使用旧的或新的路由器代码。

模板中的变量来自已知的 locals 。提供本地人的一种方法是在调用render时传递它们:

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

您还可以使用res.localsapp.locals指定本地人。在这里使用app.locals是不合适的,因为它们将在所有请求之间共享,但使用res.locals将是一个可行的选择:

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

本地人在调用模板之前由Express合并,本地人传递给render优先于res上的本地人。

如果旧的路由器代码确实与该模板一起使用,那么我最好的猜测是,您提供的某些代码是在res.locals上设置相关值并且您的更改在某种程度上打破了这一点。

答案 2 :(得分:0)

此语法特定于主体解析器;需要该软件包,并在您的代码中将const Skills = require('../models/skills.model.js'); const SkillBranch = require('../models/skillbranch.model.js'); exports.getSkills = function (req, res) { let branchSkills = []; SkillBranch.find(function (err, branches) { if (branches) { var obj = { "status": "200", "message": "skills", "data": branches } for (var i = 0; i < branches.length; i++) { Skills.find({ skillbranch: branches[i]._id }, function (err, skills) { console.log(JSON.stringify(skills)); //this is returning after res.send() branchSkills.push(skills); }) if (i == branches.length - 1) { var obj = { "status": "200", "message": "skills", "data": branchSkills } //this is returning before Skills.find() is complete res.send(JSON.stringify(obj)); } } } else { var obj = { "status": "500", "message": "Getting skills ", "data": [] } res.send(JSON.stringify(obj)); } }) }; 设置为extended

true