我正在為全球快遞做一些錯誤處理。當我按照此鏈接Express 中的檔案進行操作時
它是用謊言寫的
app.use((err, req, res, next) => {
console.log(req.originalUrl);
next()
})
問題是當我嘗試在函式內接受 4 個變數時。它不起作用。
但是當我嘗試將上述內容轉換為這樣的內容時 err
app.use(( req, res, next) => {
console.log(req.originalUrl);
next()
})
它開始作業,它向我展示console.log
了這里有什么問題?
這是我的服務器代碼檔案
const app = express();
app.use((err, req, res, next) => {
console.log(req.originalUrl);
next()
})
app.get("/", (req, res) => {
res.send("api running");
});
const PORT = process.env.PORT || 5000;
app.listen(
PORT,
console.log(
`server running ${process.env.NODE_ENV} on port ${PORT}`
)
);
我正在使用這些版本
“快遞”:“^4.17.1”,“貓鼬”:“^6.1.0”
uj5u.com熱心網友回復:
只有在出現實際錯誤時才會呼叫四變數中間件。它不會執行,直到有東西呼叫next(err)或沒有請求處理程式處理請求,并且到達 Express 路由的末尾并查找默認錯誤處理程式。
另外,請確保您的錯誤處理中間件是最后注冊的。
如果您希望在所有請求上執行中間件,那么只需使用通常的三個變數宣告它,如果請求被路由到它,它將被稱為常規中間件。這是一個 Express 設計要求(有點奇怪的設計,但它就是這樣)。
因此,您的設計意圖是注冊錯誤處理中間件(僅在錯誤條件下執行)或常規中間件(在正常請求上執行)。你必須決定你想要哪個。如果兩者都需要,則實作兩個單獨的處理程式,一個帶有三個引數,一個帶有四個引數。
uj5u.com熱心網友回復:
從您指向的檔案中:
在其他 app.use() 和路由呼叫之后,您最后定義錯誤處理中間件
而你并沒有這樣做,你是在其他路線之前定義它。將它移到串列的末尾,它應該可以作業。
const app = express();
app.get("/", (req, res) => {
res.send("api running");
});
app.use((err, req, res, next) => {
console.log(req.originalUrl);
next()
})
const PORT = process.env.PORT || 5000;
app.listen(
PORT,
console.log(
`server running ${process.env.NODE_ENV} on port ${PORT}`
)
);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/380620.html
