node-expressmysql和错误:发送后不能设置头

q5iwbnjs  于 2021-06-19  发布在  Mysql
关注(0)|答案(1)|浏览(323)

我正在使用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
});

任何帮助都将不胜感激。谢谢。

qncylg1j

qncylg1j1#

你差点就成功了,伙计!但是 render 应该在里面 db.query 例如

//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
    });
  });

原因是 db.query 是回调函数,如果 res.render 在它之外,javascript引擎将首先执行它,这样您就不会得到任何信息 postList . 所以,你必须等到 db.query 完成并填充 postList 然后渲染它。
为什么发送邮件后无法设置邮件头,因为您执行了 res.render 多次(您将其放入循环中)。必须执行一次。
希望有帮助。

相关问题