Javascript Node Express MySQL及其错误:发送后无法设置头
我正在使用Node.js、Express.js和MySQL数据库。在数据库中,我想使用Pug.js视图引擎显示一些帖子。我通过连接到数据库并正确呈现主路由使其正常工作,但显然我正在进行第二次回调,因为我得到了错误: 发送邮件后无法设置邮件头 我不确定如何在不进一步破坏它的情况下修复它,因为它现在实际呈现出了预期的效果。以下是我的工作内容: app.js:Javascript Node Express MySQL及其错误:发送后无法设置头,javascript,mysql,node.js,express,pug,Javascript,Mysql,Node.js,Express,Pug,我正在使用Node.js、Express.js和MySQL数据库。在数据库中,我想使用Pug.js视图引擎显示一些帖子。我通过连接到数据库并正确呈现主路由使其正常工作,但显然我正在进行第二次回调,因为我得到了错误: 发送邮件后无法设置邮件头 我不确定如何在不进一步破坏它的情况下修复它,因为它现在实际呈现出了预期的效果。以下是我的工作内容: app.js: // Home Route app.get('/', function(req, res){ //get posts from data
// 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});
}
});
});
它再次呈现良好,但终端向我抛出了错误,如果可能的话,我更愿意修复它。
我已尝试将索引的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
});
在此方面的任何帮助都将不胜感激。谢谢。你几乎成功了,伙计!但是渲染应该在db.query中,例如 解释是db.query是回调函数,如果您将res.render放在它之外,javascript引擎将首先执行它,这样您就不会在postList中获得任何内容。所以,您必须等到db.query完成并填充postList,然后呈现它 为什么您无法在发送头之后设置头,因为您多次执行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
});
//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);
} // end for loop
res.render('index', {
title: 'mySite',
page: 'News',
postList: postList
});
});