2

我现在正在使用 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)
    }));

现在它说查询在第二部分中未定义(显然我不能这样做......)但是我怎样才能让第二个函数在不使用全局变量的情况下访问该变量?由于我将有多个人使用此脚本,并且过多的全局变量可能不是一个好主意。

4

1 回答 1

1

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

但是,请注意 Express 已经为您执行查询字符串解析 [1],因此您甚至不需要userIdDetect中间件功能。只需让middleware/im请求处理程序查看 `req.query 中的对象,该对象应该已经包含一个名为任何查询字符串参数的字段。

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

于 2013-10-02T23:50:55.470 回答