我正在使用以下结构
在json文件中创建快捷js中的路由{
"/home":{
"token":"ksdjfglkas"
},
"/logout":{
"token":"ksdjfglksaudhf"
}
}
我需要能够访问routes函数内的令牌。我用来生成路线的js是
for(var endpoint in context){
var route = context[endpoint];
app.use(endpoint,
function(req,res,next){
req.token= route.token;
next();
},
require('./route-mixin'));
}
我面临的问题是route-mixin方法总是得到最后一个令牌。context
在这种情况下只是我在上面添加的js文件。如何为每条路线单独传递不同的标记。
答案 0 :(得分:1)
此问题的解决方案是将循环内容放入闭包中。
第一个中间件中出现错误消息mutable variable is accessible from closure
。这篇文章Mutable variable is accessible from closure. How can I fix this?给了我一个使用闭包的提示。
因此,让它运行所需的一切都在改变:
for(var endpoint in context){
var route = context[endpoint];
app.use(endpoint,
function (req, res, next) {
req.token = route.token;
next();
},
function (req, res) {
console.log(req.token);
res.send('test');
}
);
}
为:
for(var endpoint in context){
(function() {
var route = context[endpoint];
app.use(endpoint,
function (req, res, next) {
req.token = route.token;
next();
},
function (req, res) {
console.log(req.token);
res.send('test');
}
);
})();
}
我成功运行的完整示例代码:
var express = require('express');
var app = express();
var context = {
"/home":{
"token":"ksdjfglkas"
},
"/logout":{
"token":"ksdjfglksaudhf"
}
};
for(var endpoint in context){
(function() {
var route = context[endpoint];
app.use(endpoint,
function (req, res, next) {
req.token = route.token;
next();
},
function (req, res) {
console.log(req.token);
res.send('test');
}
);
})();
}
app.listen(3000);