2

我正在尝试做一些简单的事情(我希望):从数据库接收 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 框架。

4

1 回答 1

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在单独的闭包中为每次迭代保留不同的值。

于 2013-02-27T23:04:31.250 回答