Search code examples
next.jserror-handling

How to create global error handler in next js for API?


I created a function for handling the error but I have to pass this function to every try-catch block of the API. How can I avoid that? Is there a better way to handle API errors in NextJS?

The function which I created, please suggest any doc or example

const errorHandler = (err, req, res, next) => {
  const statusCode = err.statusCode || 500;
  const isDevelopment = process.env.NODE_ENV === 'development';
  // console.log("err",err);
  const responseMessage = isDevelopment ? `invalid request ${err.message}` : 'Something went wrong';
  return res.status(statusCode).json({
    status: false,
    message: responseMessage,
  });
};


module.exports = errorHandler;

Solution

  • If you already use axios, you could use axios.interceptor which intercept all request to API so that you can adjust your function.

    https://axios-http.com/docs/interceptors

    ex)

    axios.interceptors.response.use(
      response => response,
      error => {
        if (error.response && error.response.status === 401) {
          // 401 Unauthorized error handlong
        } else if (error.response && error.response.status === 404) {
          // 404 Not Found error handling
        } else if (error.response && error.response.status === 500) {
          // 500 Internal Server Error handling
        } else {
          // ETC
        }
        return Promise.reject(error);
      }
    );
    

    If you don't want to use axios, there's also Next.js built-in feature called 'middleware' which do the similar thing(intercept all request to specific API endpoint you want or to ALL).

    https://nextjs.org/docs/app/building-your-application/routing/middleware