2013-10-02 49 views
2

我用快遞/節點,現在我有以下變量的作用域/ express.js

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

這裏/究竟是如何調用'第二部分'?我也正確地認爲第二部分是第二個app.use? – nemo

+0

@nemo是的,他們都在app.js;而'第二'部分是指'app.use(require('./ middleware/im')({'... –

回答

1

您定義的每個中間件都爲您提供了讀取請求信息和修改請求/響應對象的機會。您應該爲請求對象添加一個query字段,然後讓middleware/im的請求處理程序在請求對象中查找該字段,而不是設置稱爲查詢的變量。

但是,請注意,Express已經爲您執行查詢字符串解析[1],因此您甚至不需要userIdDetect中間件功能。只需要middleware/im的請求處理程序查找`req.query中的對象,該對象應該已經包含一個名爲不管查詢字符串參數被命名的字段。

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