node.js - TypeError: res.status är inte en funktion i ett felhanterings-middleware
Jag vill helt enkelt lägga till en minimal middleware för att hantera fel inom mitt Express TypeScript-projekt.
Jag använder errors-metoden från celebration för att låta den hantera celebration/joi-fel, och vill lägga till en annan för att hantera andra fel.
Här är min kod:
app.use(errors()); // celebration error handling
app.use((err: any, req: Request, res: Response) => res.status(300).json(err.message));
För att testa det försöker jag skicka en GET till en endpoint som inte finns, och jag fortsätter att få detta fel: TypeError: res.status är inte en funktion
Vad ska jag göra för att kunna använda Request som jag vill?
Svar #1
Om du vill skriva felhanterings-middleware måste du tillhandahålla en funktion med fyra deklarerade parametrar, inte bara tre. Så i ditt fall:
app.use((err: any, req: Request, res: Response, next: NextFunction) => res.status(300).json(err.message));
Även om du inte använder next-funktionen i din kod, kan Express bara avgöra att det är en felhanteringsmiddlewarefunktion om den har fyra formella parametrar. Från dokumentationen som länkas ovan:
Felmhanterings-middleware tar alltid fyra argument. Du måste ange fyra argument för att identifiera det som en felhanterings-middlewarefunktion. Även om du inte behöver använda
next-objektet måste du ändå ange det för att behålla signaturen. Annars kommer next-objektet att tolkas som vanlig middleware och kommer inte att kunna hantera fel.
Express måste titta på length-egenskapen hos funktionen för att veta om det är en felhanteringsmiddleware eller inte.
