【问题标题】:send data to express.js in a for loop在 for 循环中将数据发送到 express.js
【发布时间】:2016-10-07 16:59:04
【问题描述】:

我需要帮助,我真的无法解决这个问题。 我有这个网站使用Node.js 调用mySQL 查询并将它们显示为表格,每个表格都在它自己的页面中。为此,我创建了 4 个对象,包括名称、标题和查询。当我将这段代码运行四次(从queryPage[0]queryPage[3])时,它工作得很好。但我想把它放到一个 for 循环中,这样我就不需要 4 次重复相同的行,但是它不起作用。页面无法加载...知道发生了什么吗?

connection.query(queryPage[0].query, function(err, rows) {
  var arr = [];
  for (var i in rows) {
    arr[i] = rows[i];
  }
  app.get('/' + queryPage[0].name, function(req, res) {
    res.render('pages/' + queryPage[0].name, {
      title: queryPage[0].title,
      data: arr
    });
  });
});

【问题讨论】:

  • 您的代码是如何工作的?是否处于工作状态?
  • 如果我理解正确,当您启动您的应用程序时,您会从 db 获取每个页面的数据并为其设置路由,然后当请求进入您为行提供服务的路由之一时。这意味着如果您更改数据库中的数据,您仍然会在所有页面上获得旧数据。那是对的吗?我的意思是大多数人会在请求到来时查询 db,以便您获得最新数据。
  • 这很有趣,我没想到。谢谢你。然而,这不是我的问题。我只是想了解为什么这段代码在我写 4 次而不是在 for 循环中时有效
  • 由于我看不到您的 for 循环,因此很难说出问题所在,但很可能其中一条路线应该有效。如果您使用 queryPage[i],原因是在 for 循环中,那么您将创建 4 次路由,其名称为最后一页 queryPage[3].name,这是由于 node.js 的异步特性
  • 你知道,这正是发生的事情!最后一个总是有效的。有没有其他方法可以循环路由?

标签: mysql node.js express ejs


【解决方案1】:

我认为你需要更多这样的东西

var queryPage = [ ... ];
// This route catches all request
app.get('/:name', function (req, res, next) { 
    // :name = req.params.name

    var page;
    for(var i = 0, l = queryPage.length; i < l; i++)
        if(queryPage[i].name === req.params.name) {
            page = queryPage[i];
            break;
        }

    // Check the page exists
    if(!page) return res.status(404).send('Not found');
    // if(!page) return next();

    connection.query(page.query, function(err, rows) {
        res.render('pages/' + page.name , {
            title: page.title, 
            data: rows
        });
    });
});

【讨论】:

  • 也许(肯定做到)我缺乏知识,但我不明白'/:name' 的用途。我认为您的方式可行,但我不知道如何将其配置到我的代码中...
  • 如果地址是 example.com/something 那么 :name 是 something 所以 req.params.name 将是 something
猜你喜欢
  • 1970-01-01
  • 2018-03-29
  • 1970-01-01
  • 2019-08-14
  • 1970-01-01
  • 2022-06-28
  • 1970-01-01
  • 1970-01-01
  • 2014-09-06
相关资源
最近更新 更多