尝试遍历一个数组并为每个数组添加一个get函数

我想遍历样式标签,并为每个写一个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]); }); } 

我不完全清楚你问的是什么问题,但是我确实看到你在callback中使用i的问题。 因为app.get()大概是asynchronous的,并且会在一段时间后完成,所以i的值将不会有效。 你需要创build一个闭包来捕获i的价值。 有几种方法可以做到这一点。 以下是使用立即调用的函数expression式(通常缩写为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所以它将仍然有正确的价值在以后的时候,调用callback。

如果这不是你所问的(尽pipe它仍然是需要修正的),那么请更详细地描述你所问的问题。

不要在Node中使用for循环,因为它不会创build闭包 。 相反,我build议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(); } 

我看到你正在尝试构build一个Node.js Express路由。

我有些惊讶,这不起作用,因为我认为这些路线的宣布是同步的。

你可以看看app.routes ,看看有什么节点为你app.routes ? 我猜你可能已经做到了这一点,但我想我会提到它。

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