我有2个架构:Blogdemo和Review。两者都在同一个文件中:landing.ejs 我希望两个架构的内容都出现在着陆页上。
代码:
app.get('/', function (req, res,next) {
Blogdemo.find({}).sort([['_id', -1]]).limit(3).exec(function(err,allBlogs) { //finds the latest blog posts (upto 3)
if(err) {
console.log(err);
} else {
res.render("landing", {blog : allBlogs , moment : now});
}
})
next();
}, function (req, res) {
Review.find({}).sort([['_id', -1]]).limit(3).exec(function(err,allReviews) { //finds the latest reviews (upto 3)
if(err) {
console.log(err);
} else {
res.render("landing", {review : allReviews, moment : now});
}
})
})
我收到错误:“未定义审核”。如果我更改回调的顺序,我会收到错误:“博客未定义”。我知道回调有问题。
我浏览了快速文档并使用了这个:
app.get('/', function (req, res, next) {
console.log('Request URL:', req.originalUrl)
next()
}, function (req, res, next) {
console.log('Request Type:', req.method)
next()
})
这完美无缺。但我遵循的确切模式并没有奏效。我做错了什么?
答案 0 :(得分:1)
从我所看到的,你做错了一件事:将next()
置于异步范围之外。
试试这个:
app.get('/', function(req, res, next) {
Blogdemo.find({}).sort([
['_id', -1]
]).limit(3).exec(function(err, allBlogs) { //finds the latest blog posts (upto 3)
if (err) next(err);
res.locals.blog = allBlogs;
res.locals.moment = now;
next();
})
}, function(req, res) {
Review.find({}).sort([
['_id', -1]
]).limit(3).exec(function(err, allReviews) { //finds the latest reviews (upto 3)
if (err) return next(err);
res.locals.review = allReviews;
res.render("landing", res.locals); // 2nd argument is optional.
})
})
答案 1 :(得分:1)
我认为,你所做的错误是rendering
同一页2次res.render
并且每次传递两个变量中的一个,这就是为什么另一个变为未定义的原因
您应该render
上一个landing
中的callback
页面,然后将variables
从第一个callback
传递到第二个res.locals
。
要将变量从一个回调传递到另一个回调,您可以使用next()
。
此外,您应该将find
放在app.get('/', function (req, res,next) {
Blogdemo.find({}).sort([['_id', -1]]).limit(3).exec(function(err,allBlogs) { //finds the latest blog posts (upto 3)
if(err) {
console.log(err);
next();
} else {
//set variable in `res.locals` and pass to next callback
res.locals.blog = allBlogs;
next();
}
})
}, function (req, res) {
Review.find({}).sort([['_id', -1]]).limit(3).exec(function(err,allReviews) { //finds the latest reviews (upto 3)
if(err) {
console.log(err);
} else {
allBlogs = res.locals.blog;
res.render("landing", {blog : allBlogs ,review : allReviews, moment : now});
}
})
})
的回调中。这样它就可以正确地将变量传递给下一个回调。
试试这个:
isInMultiWindowMode()
有关res.locals的更多信息,请阅读Express res.locals documentation。
希望这能帮到你!