![](/img/trans.png)
[英]Is there a difference between app.use(“/”, express.static) and app.use(express.static)?
[英]Does app.use(express.static("public")) call the middleware for every request?
使用app.use(express.static("public"))
是否為每個請求調用中間件,即使它不是對 static 資源的請求?
像那樣注冊時,中間件將在每個請求上運行,是的。 基本上是因為該語句實際上與以下內容相同:
app.use("/", express.static("public"))
調用express.static
會返回一個經典的中間件 function,它將在您在app.use
中指定的每個路徑上運行。 如果你想讓它只在特定路徑上啟動,你可以像這樣注冊它:
app.use('/static', express.static('public'));
只有在路由尚未處理請求時才會調用它。
請記住,路由是按照它們注冊的順序進行測試的,舉個例子:
const express = require('express');
const app = express();
const port = 3000;
app.get('/foo', (req, res) => {
console.log('Foo!');
res.send('Foo!');
});
app.use(function (req, res, next) {
console.log('middleware triggered');
next();
});
app.get('/bar', (req, res) => {
console.log('Bar!');
res.send('Bar!');
});
app.listen(port, () => {
console.log(`Example app listening at http://localhost:${port}`);
});
如果我請求http://localhost:3000/foo
然后服務器將記錄:
Foo!
/foo
端點匹配請求,然后調用res.send()
。
如果我請求http://localhost:3000/bar
然后它記錄:
middleware triggered
Bar!
中間件啟動(因為它匹配路由),調用next()
到 go 到下一個匹配路由的 function,然后調用/bar
處理程序。
position 小心你的static
中間件很重要。
如果你把它放在你想要匹配請求的路由之前,那么有兩種可能的負面影響:
另一方面,如果你把它放在最后,那么你會解決效率問題,但一些糟糕的路由設計可能意味着某些東西會創建一個 URL 匹配一個已經存在的 static 文件並屏蔽它。
最好指定一個您知道永遠不會與路由沖突的目錄(例如app.use('/static', express.static('public'));
)以避免這種可能性。 作為獎勵,這意味着任何通常為 404 的損壞鏈接都不必通過 static 中間件到 go,除非鏈接首先指向/static
路徑。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.