Javascript Node Express MySQL及其错误:发送后无法设置头

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

我正在使用Node.js、Express.js和MySQL数据库。在数据库中,我想使用Pug.js视图引擎显示一些帖子。我通过连接到数据库并正确呈现主路由使其正常工作,但显然我正在进行第二次回调,因为我得到了错误:

发送邮件后无法设置邮件头

我不确定如何在不进一步破坏它的情况下修复它,因为它现在实际呈现出了预期的效果。以下是我的工作内容:

app.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});
    }
  });
});
它再次呈现良好,但终端向我抛出了错误,如果可能的话,我更愿意修复它。 我已尝试将索引的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
    });
  });