所以我設定了一個基本的快速應用程式,它從一個名為 public 的目錄中提供一個靜態檔案。
公共目錄包含 3 個檔案“index.html”、“script1.js”、“script2.js”和“script3.js”。腳本檔案只是空的 .js 檔案。
索引.html
<!DOCTYPE html>
<html lang="en">
<head>
<title>Document</title>
</head>
<body>
<h1>Middleware</h1>
<script src="./script1.js" crossorigin="anonymous"></script>
<script src="./script2.js" crossorigin="anonymous"></script>
<script src="./script3.js" crossorigin="anonymous"></script>
</body>
</html>
服務器.js
const express = require('express')
const path = require('path')
const app = express()
app.use((req, res, next) => {
console.log('middleware was ran', new Date())
next()
})
app.use(express.static(path.resolve(__dirname, 'public')))
app.listen(3000, () => {
console.log('listening on port 3000')
})
每當我運行 server.js 檔案并訪問“/”路由時,我都會為我包含的每個腳本檔案在控制臺中獲得一個額外的“中間件已運行”輸出。在這種情況下,我的輸出將是:
listening on port 3000
middleware was ran 2022-06-11T21:45:21.609Z
middleware was ran 2022-06-11T21:45:21.644Z
middleware was ran 2022-06-11T21:45:21.648Z
middleware was ran 2022-06-11T21:45:21.650Z
為什么會這樣?
uj5u.com熱心網友回復:
是的,這很正常。任何匯入的檔案(瀏覽器尚未快取的)都會向您的服務器發出請求以獲取該匯入的 JS 檔案。由于您似乎已將服務器配置為用于express.static()提供這些檔案,因此中間件之前的任何express.static()中間件都會看到這些請求。
由于您的express.static()中間件將“處理”請求并且不會繼續進一步路由,express.static()因此當靜態檔案由express.static(). 中間件按照宣告的順序匹配并執行,直到請求處理程式(無論是否為中間件)發送回應并通過不呼叫來停止進一步路由next()。
有什么辦法可以限制嗎?
如果你把你的express.static()中間件放在第一位,那么它將首先滿足這些對靜態檔案的請求,并且它后面的任何中間件都不會執行。
const express = require('express');
const path = require('path');
const app = express();
// put this first so static files are served first
// and any other middleware after this won't execute
app.use(express.static(path.resolve(__dirname, 'public')));
app.use((req, res, next) => {
console.log('middleware was ran', new Date());
next();
});
app.listen(3000, () => {
console.log('listening on port 3000');
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/489762.html
標籤:javascript 节点.js 表示 nodejs-服务器
上一篇:訪問令牌給予承諾
下一篇:可選引數未定義
