似乎res.render在从mongodb中提取数据之前加载。无论如何都有这个。
app.use('/portfolio/:item_id', function(req, res, next) {
portfolioItem.findOne({ projectID : req.params.item_id}, function (err, item){
if (err) return handleError(err);
if (item) {
res.locals = {
script: ['isotope.js'],
title: item.projectTitle,
projectID: item.projectID,
projectTitle: item.projectTitle,
projectDescription: item.projectDescription,
projectURL: item.projectURL,
customerName: item.customerName,
websiteCategories: item.projectCategories,
grid: item.grid
}
}});
res.render('case_study');
});
作为旁注,我也在使用车把。
答案 0 :(得分:2)
正如snozza在评论中提到的那样,res.render
必须在findOne回调中。
这是由于Node.js以及它是异步操作的。它同时运行两个函数,并且不会等待来自MongoDB调用的数据返回。在findOne函数本身中,代码是同步运行的,因此在第二个if语句之后放置res.render
将解决问题。
app.use('/portfolio/:item_id', function(req, res, next) {
portfolioItem.findOne({ projectID : req.params.item_id}, function (err, item){
if (err) return handleError(err);
if (item) {
res.locals = {
script: ['isotope.js'],
title: item.projectTitle,
projectID: item.projectID,
projectTitle: item.projectTitle,
projectDescription: item.projectDescription
projectURL: item.projectURL
customerName: item.customerName,
websiteCategories: item.projectCategories,
grid: item.grid
}
res.render('case_study');
}
});
});