Chcę złapać błąd z middleware bodyParser(), gdy wysyłam obiekt json i jest on nieprawidłowy, ponieważ chcę wysłać niestandardową odpowiedź zamiast ogólnego błędu 400.Catch express bodyParser error
To jest to, co mam i to działa:
app.use (express.bodyParser());
app.use (function (error, req, res, next){
//Catch bodyParser error
if (error.message === "invalid json"){
sendError (res, myCustomErrorMessage);
}else{
next();
}
});
Ale wydaje mi się bardzo brzydki podejście bo mam porównanie komunikat o błędzie, które mogą ulec zmianie w przyszłych wersjach ekspresowych. Czy istnieje jakikolwiek inny sposób na złapanie błędów bodyParser()?
EDIT:
Jest to błąd, gdy organizm zapytanie ma nieprawidłową JSON:
{
stack: 'Error: invalid json\n at Object.exports.error (<path>/node_modules/express/node_modules/connect/lib/utils.js:55:13)\n at IncomingMessage.<anonymous> (<path>/node_modules/express/node_modules/connect/lib/middleware/json.js:74:71)\n at IncomingMessage.EventEmitter.emit (events.js:92:17)\n at _stream_readable.js:872:14\n at process._tickDomainCallback (node.js:459:13)',
arguments: undefined,
type: undefined,
message: 'invalid json',
status: 400
}
Dość drukowane stosu:
Error: invalid json
at Object.exports.error (<path>/node_modules/express/node_modules/connect/lib/utils.js:55:13)
at IncomingMessage.<anonymous> (<path>/node_modules/express/node_modules/connect/lib/middleware/json.js:74:71)
at IncomingMessage.EventEmitter.emit (events.js:92:17)
at _stream_readable.js:872:14
at process._tickDomainCallback (node.js:459:13)
To nie jest rozwiązanie. Nie bierzesz pod uwagę, że zanim ten kod może być innym oprogramowaniem pośredniczącym.Jeśli złapiesz w taki sposób wyjątek, może to prowadzić do nieprzewidywalnego stanu. Przynajmniej lepiej napisać: 'app.use (function (error, req, res, next) {/ * Shutdown node * /}; app.use (bodyParser.json()); app.use (function (error, req, res, next) {/ * if err.status == 4 ** następnie obsłużyć błąd json => res.status (400) .send(), else shutdown node * /}); ' – Dao
NIEBEZPIECZEŃSTWO NIEBEZPIECZEŃSTWO, to zaczepienie Jakikolwiek błąd w powyższym oprogramowaniu pośrednim, jak @Dao powiedział Unsafe – light24bulbs