我正在寫非常基本的快速代碼
const express = require('express');
const app = express();
app.use('/willgo', (req, res, next) => {
console.log('In a middleware');
next();
})
app.use('/notgo', (req, res, next) => {
console.log('In another middleware');
res.send('<h1> Inn intermediate </h1>');
res.end();
})
app.use('/', (req, res, next) => {
console.log('In final middleware');
res.send('<h1> Inn final </h1>');
})
// const server = http.createServer((req, res) => {
// server.listen(2001);
app.listen(3002);
在localhost:3002/notgo控制臺上是
In another middleware
In final middleware
它表明最后一個中間件已執行,即使我已經發送了請求。
這是默認行為還是我遺漏了什么,因為 res.send() 應該完成處理。
uj5u.com熱心網友回復:
環形,
res.end();將完成回應。但是這段代碼需要是中間件還是普通端點?
然后你應該使用 app.get();
控制臺輸出 'In final middleware' 可能是因為瀏覽器想從根目錄加載一個 favicon.ico,它會呼叫 app.use('/', .... )
如果您從 cli 執行 curl / invoke web 請求,您會看到只有一個控制臺輸出。
在 Windows 10/11 上:(iwr http://localhost:3002/notgo).content
uj5u.com熱心網友回復:
由于app.use用于基于模式掛載中間件,因此當您點擊/notgo端點時,您的最后一個“app.use('/', ....”將被匹配。
這是一個很好的答案,解決了與您類似的問題,可以更好地解釋它https://stackoverflow.com/a/68054977/1968723
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/494973.html
