【问题标题】:Trying to dynamically set Pages in Loop with Node.js尝试使用 Node.js 动态设置循环中的页面
【发布时间】:2013-02-13 23:23:58
【问题描述】:

我正在尝试做一些简单的事情(我希望):从 a 数据库接收 JSON 并循环遍历它以在 Node.js 中创建所有必要的页面路由。截至目前,我只是使用存根数据,但 console.log 始终显示键值对中的最后一个值“联系人”。第一个控制台正确显示所有内容。

这是我的代码:

routes = {
"Home" : "index.html",
"about" : "about.html",
"How it Works" : "how_it_works.html",
"contribute" : "contribute.html",
"contact" : "contact.html"
};

function routesGetandSet(data) {
  for (key in data) {
    console.log(key + "---" + '/' + data[key]);
    app.get('/' + data[key], function(req, res) {
      console.log(data[key]);
    });
  }
}

routesGetandSet(routes);

我认为这是在 Node 中动态创建页面路由的最简单方法(最终我会将数据绑定到其中),但我可能错了。

谁能指出我正确的方向?我正在使用 express 框架。

【问题讨论】:

  • 怀疑这是您的问题,但是:您在第一个控制台日志后缺少分号。
  • 已修复。谢谢指出!

标签: javascript node.js express for-in-loop serving


【解决方案1】:

问题是闭包中key 的值对于您的所有路由都是相同的(最后一次迭代中的值)。

这应该有助于解释如何创建一个新的闭包,每个闭包都有一个单独的值: http://www.mennovanslooten.nl/blog/post/62

这样的事情应该会有所帮助:

for (key in data) {
  console.log(key + "---" + '/' + data[key]);
  (function(key1) {
    app.get('/' + data[key1], function(req, res) {
       console.log(data[key1]);
    });
   }
  )(key);
}

在上面的代码中,key1 在单独的闭包中为每次迭代保留不同的值。

【讨论】:

  • 啊,这太棒了。但是,尝试在节点中运行时,我不断收到以下错误:)(key); ^ SyntaxError: Unexpected token )
  • 这个节点是特定的还是一般的?感谢您的帮助!
  • 这不是 node 特有的,这是一个 javascript 特性,但是你会在 node.js 中遇到更多,因为你有更多的异步代码。
  • 我想我错过了}。我修好了。
  • 啊,这太完美了!也感谢您为研究提供信息!是时候让我更多地了解闭包了:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-05
  • 1970-01-01
  • 2018-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多