我有以下代码导致我错误说明无法读取未定义的属性'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");
答案 0 :(得分:0)
检查一下你应该将数据传递给渲染方法以在模板引擎中访问它,这样你就不会在页面中有任何数据这就是你未定义的原因......
答案 1 :(得分:0)
我不知道您所描述的更改是如何导致此问题的,我认为该模板无法使用旧的或新的路由器代码。
模板中的变量来自已知的 locals 。提供本地人的一种方法是在调用render
时传递它们:
res.render("blogs/new", {
blog: req.body.blog
});
您还可以使用res.locals
或app.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