Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Always return JSON data from ExpressJS default error handler

I am building an API server using ExpressJS. I want to ensure that the server always responds with JSON data rather than HTML data. For all the custom routes that I define, I can make the server respond with JSON data.

But in case of errors like "Page not found (404)" or "Internal Server Error (500)" the server responds with HTML content. Is there any inbuild configuration settings that allow making these responses in JSON format?

I can define custom error handlers for this, but I wish to use the features of inbuild error handler like hiding stack trace based on NODE_ENV.

like image 914
Vivek Avatar asked Oct 10 '18 11:10

Vivek


Video Answer


1 Answers

According to the express documentation, you may handle each 404 and 500 server errors like this to send json (or any other response you like)

Send 404 as a json reponse,

app.get('*', function(req, res){
    res.status(404).json({}); // <== YOUR JSON DATA HERE
});

For 500 Internal server error ,

app.use(function (err, req, res, next) {
    console.error(err.stack)
    res.status(500).json({}) // <== YOUR JSON DATA HERE
})

Hope that helps!

Please follow these references for more info

  • Express Error Handling Documentation
  • Express 404 Question on StackOverflow
like image 166
Janith Avatar answered Sep 21 '22 03:09

Janith