1

我想遍历样式标签并为每个标签编写一个 GET 函数。问题是编写 GET 函数时引用了“styleTags[i]”,而不是将“styleTags[i]”转换为适当的标记。

var styleTags = ['cont', 'ecce'];

for (var i = 0; i < styleTags.length; i++) {
  app.get('/photos-' + styleTags[i], selectNav, function(req, res) {
    getDynPhotos(req, res, styleTags[i]);
  });
}
4

3 回答 3

2

我不完全清楚你在问什么问题,但我确实看到你i在回调中使用的问题。因为app.get()可能是异步的并且会在一段时间后完成,所以 的值i将不再有效。您需要创建一个闭包来捕获i. 有几种方法可以做到这一点。这是使用立即调用的函数表达式(通常缩写为 IIFE)的一种方法:

var styleTags = ['cont', 'ecce'];

for (var i = 0; i < styleTags.length; i++) {
  (function(index) {
      app.get('/photos-' + styleTags[index], selectNav, function(req, res) {
        getDynPhotos(req, res, styleTags[index]);
      });
  })(i);
}

这将冻结i我命名的函数参数中的值index,因此在稍后调用回调时它仍然具有正确的值。

如果这不是您要问的(尽管它仍然需要修复),那么请更详细地描述您要问的内容。

于 2013-10-25T00:42:52.983 回答
1

不要在 Node 中使用 for 循环,因为它不会创建闭包。相反,我推荐async.each

var async = require('async');
var styleTags = ['cont', 'ecce'];

async.each(styleTags, function(styleTag, callback) {
  app.get('/photos-' + styleTag, selectNav, function(req, res) {
    getDynPhotos(req, res, styleTag);
  });
callback();
}
于 2013-10-25T10:22:04.313 回答
0

我看到您正在尝试构建 Node.js Express 路由。

我有点惊讶这不起作用,因为我认为这些路由的声明将是同步的。

你能看看app.routesNode 为你准备了什么吗?我猜你可能已经这样做了,但我想我会提到它。

如果这不起作用,我有两个建议:在您的路由中使用正则表达式来隔离您的路由的类别部分(然后在请求时验证路由),或者将您的路由直接插入到app.routes对象结构中。

于 2013-10-25T01:44:36.540 回答