我正在使用node.js、express.js和mysql数据库。在数据库中,我有我想用pug.js视图引擎显示的帖子。通过连接到数据库并正确呈现主路由,我使其正常工作,但显然我正在进行第二次回调,因为我得到了错误:
发送邮件后无法设置邮件头。
我不确定如何在不进一步破坏它的情况下修复它,因为它现在实际呈现出了预期的效果。以下是我的工作内容:
应用程序.js:
// Home Route
app.get('/', function(req, res){
//get posts from database to show on news section.
var postList = [];
db.query('SELECT * from articles', function(err, rows) {
if(err) throw err;
for (var i = 0; i < rows.length; i++) {
//missing the img fields
var post = {
'id':rows[i].id,
'title':rows[i].title,
}
//Add the newly created post object to the postList array
postList.push(post);
//THE ERROR IS PROBABLY BECAUSE OF THIS \/
res.render('index', {
title:'mySite',
page: 'News',
postList: postList});
}
});
});
以下是index.pug:
extends layout
block content
table
for post in postList
tr
td
h3 #{post.title}
td
p #{post.id}
再次它呈现罚款,但终端是扔在我的错误,我宁愿修复它,如果可能的话。我曾尝试将索引的res.render从查询中拉出,如下所示:
// Home Route
app.get('/', function(req, res){
//get posts from database to show on news section.
var postList = [];
db.query('SELECT * from articles', function(err, rows) {
if(err) throw err;
for (var i = 0; i < rows.length; i++) {
//missing the img fields
var post = {
'id':rows[i].id,
'title':rows[i].title,
}
//Add the newly created post object to the postList array
postList.push(post);
}
});
//THIS FIXES THE ERROR \/
res.render('index', {
title:'mySite',
page: 'News',
postList: postList});
//THIS NO LONGER RENDERS THE postList ARRAY
});
任何帮助都将不胜感激。谢谢。
1条答案
按热度按时间qncylg1j1#
你差点就成功了,伙计!但是
render
应该在里面db.query
例如原因是
db.query
是回调函数,如果res.render
在它之外,javascript引擎将首先执行它,这样您就不会得到任何信息postList
. 所以,你必须等到db.query
完成并填充postList
然后渲染它。为什么发送邮件后无法设置邮件头,因为您执行了
res.render
多次(您将其放入循环中)。必须执行一次。希望有帮助。