一個404處理器在快遞所有未處理的請求通常是這樣的:
app.use(function(req, res, next) {
res.status(404).sendFile(localPathToYour404Page);
});
你讓這最後的路線,你註冊,它會得到如果沒有其他路線處理了請求,則調用。
這也會捕獲您不支持的方法,如DELETE。如果你想根據請求來定製響應,那麼你可以在上面的處理程序中放入你想要的任何檢測和定製代碼。
例如,如果你想檢測DELETE請求時,你可以這樣做:
app.use(function(req, res, next) {
if (req.method === "DELETE") {
res.status(404).sendFile(localPathToYour404DeletePage);
} else {
res.status(404).sendFile(localPathToYour404Page);
}
});
或者,如果你的反應是JSON:
app.use(function(req, res, next) {
let obj = {success: false};
if (req.method === "DELETE") {
obj.msg = "DELETE method not supported";
} else {
obj.msg = "Invalid URL";
}
res.status(404).json(obj);
});
一些參考:
Express FAQ: How do I handle 404 responses?
Express Custom Error Pages
而且,當你在這,你或許應該放在一個Express error handler太:
// not that this has four arguments compared to regular middleware that
// has three arguments
app.use(function (err, req, res, next) {
console.error(err.stack)
res.status(500).send('Something broke!')
});
這可以讓你處理任何地方你的中間件遇到了錯誤,並呼籲next(err)
的情況下。
您應該更具體地說明在404情況下以及在不支持的方法情況下(以及在最後一種情況下,如果這對於任何URL是通用的,或者您需要不同的行爲針對不同的網址)。 – jcaron
@jcaron,我想有兩種行爲。在404的情況下,我將返回一個適當的響應消息。在不支持請求的情況下也是如此。 –