簡體   English   中英

節點中的條件app.use - express

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM