2016-06-20 92 views
1

對於我的api我想要一個單獨的文件來設置一個cookie(使用cookie解析器)。然而resreq不會傳遞到所需的文件...Nodejs的res未定義內部需求

index.js

app.get('/api/user/:username', function(req, res) { 
urlUsername = req.params.username; 
require('./set/cookie') 
    }); 

集/ cookie.js

res.cookie('login_session', urlUsername) // returns 'res' not defined 

正如你可以看到部分地克服這個問題我設置urlUsername哪些工作。但肯定會有另一種方式:)?

感謝

+1

是你的'./set/cookie的全部內容.js'文件? –

+1

很明顯,res在cookie.js中是未定義的,你可以在app.get中設置cookie,或者在cookie.js中聲明一個從app.get獲取res的函數。那麼你可以在該函數中執行你的任務 –

+1

這已經寫得很糟糕了...... Node不像PHP,你可以在require之前簡單地定義變量並讓文件繼承它們。 – James111

回答

2

您需要修改這樣的代碼

=======集/ cookie.js ==========

module.exports = function(res) { // accept res parameter 
    res.cookie('login_session', urlUsername) 
}; 

=========== =========== index.js

app.get('/api/user/:username', function(req, res) { 
    urlUsername = req.params.username; 
    require('./set/cookie')(res); // pass res to module 
}); 
0

你需要爲需要回報具有相同名稱的對象使用「module.exports」創建的模塊中。

+0

您需要使用「module.exports」作爲要求返回具有相同名稱的對象。 –

0

您需要修改cookie.js文件,以便它創建一個有能力將緩存中的對象,你可以通過「資源」對象,因此它的範圍是

例如可用,你cookie.js應該如下所示:

module.exports.cookie = function(res){ 
    return { 
     cache: function(){ 
      /*your cookie code*/ 
      return res.cookie('login_session', urlUsername); 
     } 
    }; 
} 

這將返回具有高速緩存方法的對象,並且具有傳遞給它的響應對象。然後,您可以通過調用調用此:

app.get('/api/user/:username', function(req, res) { 
    urlUsername = req.params.username; 
    var cookie = require('./set/cookie').cookie(res); 
    cookie.cache(); 
}); 
+0

這不起作用,cookie未設置 – user6227254

+0

更新了我的代碼,cookie緩存函數需要返回語句我相信 – andrewkodesgood