如題,最近剛嘗試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去全時監聽別的行為囉!?
還請大大們幫忙解惑,感謝!~
就是假如我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
的進行部分權限驗證