簡體   English   中英

Express中的路由處理程序是同步還是異步調用?

[英]Are the route handlers in express called synchronously or asynchronously?

我在routes.js文件中有兩個重定向:

app.get('*', blockingController01);
app.get('/test', controller02);

問題是,我有一個“阻止目標網頁”,您必須在其中輸入有效的代碼才能訪問網站的其余部分。 blockingController01發送帶有表單的渲染頁面以輸入代碼。 如果用戶沒有輸入正確的代碼,則如果他/她輸入“ / test”或其他任何代碼,則該頁面應重定向到insert code頁面。

我試圖解決此問題,只是在代碼頁的開頭放置了一個控制器,並使用通配符*覆蓋了所有路徑。 所以我想知道兩件事:

  1. 處理相同路徑的控制器是否被異步調用?
  2. Express是否有避免調用其他控制器的方法?

謝謝!

控制器(路由處理程序)不是並發調用的(這就是我所說的“異步”的意思)。

它們按照其定義順序被調用,因此在您的情況下,將為所有GET請求調用blockingController01

如果令牌正確,則該控制器可以將請求傳遞給與URL匹配的其他路由處理程序。

這是您要執行的操作的一個非常基本的示例:

app.get('*', (req, res, next) => {
  if (req.query.token !== '12345') {
    // You would use `res.render()` here, this is just a quick demo:
    return res.send(`
      <form>
      Please enter a token and press enter: <input type=text name=token>
      </form>
    `);
  }
  next();
});

app.get('/test', (req, res) => {
  res.send('<h1>Correct token!</h1>');
});

因此,任何GET請求都將到達第一個路由處理程序,該處理程序將檢查令牌的有效性(在這種情況下,它僅檢查查詢字符串參數token的值是否為“ 12345” 。如果不是,它將呈現一個表單,但是如果令牌匹配,它將調用next() ,它將請求傳遞給第二個路由處理程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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