1

I am using next-connect in my next.js app to run server side code. I am using custom error middleware but it is throwing error as

res.status is undefined

This is my error middleware

export const errorMiddleWare = (err, req, res, next) => {
  err.statusCode = err.statusCode || 500;
  let error = { ...err };

  error.message = err.message;

  if (err.name === 'CastError') {
    const message = 'Resource not found for given' + err.path;
    error = new ErrorHandler(message, 400);
  }

  if (err.name === 'ValidationError') {
    const message = Object.values(err.errors).map((e) => e.message);
    error = new ErrorHandler(message, 400);
  }

  res.status(err.statusCode).json({
    error,
    message: error.message,
    stack: error.stack,
  });
};

My route in pages inside api folder

import nc from 'next-connect';
import connectDb from '../../../config/dbconnect';
import { getAllProducts } from '../../../controllers/productController';
import { errorMiddleWare } from '../../../middlewares/error';

const router = nc();
connectDb();

//Routes
router.use(errorMiddleWare).get(getAllProducts);

export default router;

Nick
  • 103
  • 9

1 Answers1

0

Try using errorMiddleWare this way.

const router = nc({onError: errorMiddleWare});
connectDb();

//Routes
router.get(getAllProducts);
Mazedul Islam
  • 1,543
  • 1
  • 11
  • 15
  • Thanks, it worked. So for error we have to add onError? It wasnot mentioned in documentation – Nick Jul 26 '21 at 01:03
  • Actually they mentioned! "It does not support error-handling middleware pattern. Use options.onError instead". Check the first example in the API section here https://www.npmjs.com/package/next-connect – Mazedul Islam Jul 26 '21 at 06:46