iT邦幫忙

0

Express新手請教middleware的監聽器問題

  • 分享至 

  • xImage

如題,最近剛嘗試Express做個小CRUD server,看YouTube的教學寫Logging的時候遇到一個問題,程式碼如下:

/** Logging the request */
router.use((req, res, next) => {
  logging.info(NAMESPACE, `METHOD - [${req.method}], URL - [${req.url}], IP - 
  [${req.socket.remoteAddress}],YOYOYO-1`);

  // listener
  res.on('finish', () => {
    logging.info(NAMESPACE, `METHOD - [${req.method}], URL - [${req.url}], IP - 
    [${req.socket.remoteAddress}], STATUS - [${res.statusCode}], YOYOYO-2`);
  });

  next();
});

我的理解是middleware是由上到下執行,所以這整個middleware寫在最上面,這裡的//listener下 res.on方法是在這個middleware執行後就一直開啟(持續監聽),不管後面其他middleware發生什麼事,只要有做response被他監聽到他就會執行這樣嗎?
(那個console裡的YOYOYO 是用來看順序的XD)

如果原理是上面這樣,那我其他middleware就可以裝其他我想要持續監聽的listener去全時監聽別的行為囉!?

還請大大們幫忙解惑,感謝!~

Han iT邦研究生 1 級 ‧ 2022-02-09 16:11:40 檢舉
理解沒錯,但你的問題看不太懂,看看可不可舉例
samuraigo iT邦新手 4 級 ‧ 2022-02-09 17:29:18 檢舉
感謝大大,sorry剛問題打得太簡略,就是假如我A middleware 開啟一個listener去監聽有回傳就執行的console.log動作,然後下面再做一個B middleware開另一個listener去監聽有delete請求我就做console.warn, 這樣的狀態下是兩個listener只要server是啟動的狀態,他們就會一直執行下去這樣嗎?
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
Han
iT邦研究生 1 級 ‧ 2022-02-09 18:07:35

就是假如我A middleware 開啟一個listener去監聽有回傳就執行的console.log動作,然後下面再做一個B middleware開另一個listener去監聽有delete請求我就做console.warn, 這樣的狀態下是兩個listener只要server是啟動的狀態,他們就會一直執行下去這樣嗎

沒錯哦,在啟動整個服務的時候,你寫的 use 可以當作是把你寫的程式註冊到 express.app 上,註冊過的就會執行

因為你寫的是沒有給條件的,所以這種 middleware 在任何情況下的路由都會執行

app.use(function(req, res, next) {
    // something1
});

app.use(function(req, res, next) {
    // something2
});

以上範例就是把兩個匿名 function 註冊到 express.app 是永久生效的


之後如果想要針對某路徑下才執行的 middleware 就可以寫成

function verifyToken() {}
app.use('/api', verifyToken);

就可以只針對路徑是 /api 的進行部分權限驗證

我要發表回答

立即登入回答