node.js / express.js中的variables作用域

我正在使用快递/节点,我有以下几点

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) })); 

现在它说第二部分查询是未定义的(显然,我不能这样做…)但是我怎样才能使第二个函数访问该variables,而不使用全局variables? 由于我将有多个人使用这个脚本和太多的全球variables可能是一个坏主意。

您定义的每个中间件都提供了读取请求信息和修改请求/响应对象的机会。 您应该为请求对象添加一个query字段,而不是设置一个名为query的variables,然后让middleware/im的请求处理程序在请求对象中查找该字段。

但是请注意,Express已经为您执行了查询stringparsing[1],所以您甚至不需要使用userIdDetect中间件function。 只要middleware/im的请求处理程序在`req.query中的对象中查找,它应该已经包含一个字段,该字段不pipe查询string参数被命名。

[1] http://expressjs.com/api.html#req.query