我正在尝试在jQuery中设置一堆路由,它们调用相同的函数但使用不同的参数。我想以功能性的方式做到这一点,以便于阅读,扩展等......
在:
app.get('/p/:p1', p1);
app.get('/p/:p1/:p2', p2);
app.get('/p/:p1/:p2/:p3', p3);
app.get('/p/:p1/:p2/:p3/:p4', p4);
我想做的是这样的事情:
var path = '/p';
for (var i = 1; i <= 4; ++i) {
path += '/:p' + i;
debug('adding path for "%s"', path);
app.get(path, function(req, res) { p(i, req, res) });
}
不幸的是,p()
始终使用i = 5
进行调用,无论采用哪种路线。
答案 0 :(得分:1)
创建一个新的范围,其中i
的值被锁定,否则循环将结束,而i
将是异步app.get()
执行时设置的持续时间
var path = '/p';
for (var i = 1; i <= 4; ++i) {
(function(j) {
path += '/:p' + j;
debug('adding path for "%s"', path);
app.get(path, function(req, res) { p(j, req, res) });
})(i);
}
答案 1 :(得分:0)
另一种解决方案是让p()
返回一个函数:
var path = '/p';
for (var i = 1; i <= 4; ++i) {
path += '/:p' + i;
debug('adding path for "%s"', path);
app.get(path, p(i));
}
function p(i) {
return function(req, res) {
debug('i = ' + i );
// ....
};
}