[英]Conditional app.use in node - express
是否有可能在app.js中有條件地使用app.use
? Express cookie-session 無法動態更改maxAge
的值,我正在考慮做這類事情,但是我遇到了一些錯誤:
app.use(function(req,res,next ){
if(typeof req.session == 'undefined' || req.session.staySignedIn === 'undefined'){
//removing cookie at the end of the session
cookieSession({
httpOnly: true,
secure: false,
secureProxy: true,
keys: ['key1', 'key2']
});
}else{
//removing cookie after 30 days
cookieSession({
maxAge: 30*24*60*60*1000, //30 days
httpOnly: true,
secure: false,
secureProxy: true,
keys: ['key1', 'key2']
});
}
next();
});
而不是正常使用它:
app.use(cookieSession({
httpOnly: true,
secure: false,
secureProxy: true,
keys: ['key1', 'key2']
}));
現在我收到以下錯誤:
無法讀取未定義的屬性“用戶”
我相信這是指這一行(雖然它沒有說明到底在哪里)
req.session.user;
Express中的中間件是function (req, res, next) {}
等function (req, res, next) {}
。 在你的例子中, cookieSession(options)
將返回這樣一個函數,但是在你的中間件中你沒有運行它,你忽略了cookieSession
的返回值 - 即你想要運行的中間件。 然后你運行next()
。
你想要做的是在你的實際中間件中執行,讓我們稱之為條件中間件。 像這樣的東西:
app.use(function (req, res, next) {
var options = {
httpOnly: true,
secure: false,
secureProxy: true,
keys: ['key1', 'key2']
};
if(typeof req.session == 'undefined' || req.session.staySignedIn === 'undefined') {
options.maxAge = 30*24*60*60*1000; // 30 days
}
return cookieSession(options)(req, res, next);
});
您可以使用此插件Express Conditional Tree Middleware 。
它允許您組合多個和異步中間件。 看看這個! 您可以創建兩個類(一個用於第一種情況,一個用於第二種情況),分別在applyMiddleware
函數內編寫代碼,然后在主javascript文件中導入這些類,並使用orChainer將它們組合。 有關詳細信息,請參閱文檔!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.