File size: 769 Bytes
8c7b7ca
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
function errorHandler(err, _req, res, _next) {
  if (err?.name === 'ValidationError') {
    const firstError = Object.values(err.errors || {})[0];
    return res.status(400).json({ message: firstError?.message || 'Validation failed' });
  }

  if (err?.name === 'CastError') {
    return res.status(400).json({ message: 'Invalid identifier' });
  }

  if (err?.code === 11000) {
    const duplicateKeys = err.keyPattern || err.keyValue || {};
    const field = Object.keys(duplicateKeys)[0] || 'field';
    return res.status(409).json({ message: `${field} already exists` });
  }

  if (err?.message) {
    return res.status(400).json({ message: err.message });
  }
  return res.status(500).json({ message: 'Internal server error' });
}

module.exports = errorHandler;