我现在正在使用express / node,我有以下
app.use(useridDetect);
function useridDetect (request, response, next) {
var myurl = url.parse(request.url);
if (myurl.pathname === "/cookie") {
var i = request.url.indexOf('?');
query = request.url.substr(i+4, 32);
//set userid
next();
} else {
next(); // keep the middleware chain going
}
}
app.use(require('./middleware/im')({
userid: query,
maxAge: 30 * 1000,
reapInterval: 20 * 1000,
authentication: require('./libs/authentication/' + AUTH_LIBRARY)
}));
现在它说第二部分中的查询未定义(显然我不能这样做......)但是如何在不使用全局变量的情况下让第二个函数访问该变量?因为我会有多个人使用这个脚本,太多的全局变量可能是个坏主意。
答案 0 :(得分:1)
您定义的每个中间件都有机会读取请求信息并修改请求/响应对象。您应该向请求对象添加query
字段,然后让middleware/im
的请求处理程序在请求对象中查找该字段,而不是设置一个名为query的变量。
但是,请注意Express已经为您查询字符串解析[1],因此您甚至不需要userIdDetect
中间件功能。只需让middleware/im
的请求处理程序查看`req.query中的对象,该对象应该已经包含一个名为查询字符串参数命名的字段。