Node.js Error Handling Best Practices

2026-02-20·7 min read·Backend

Error Types

  • Operational Errors: Expected failures (network timeout, file not found)
  • Programming Errors: Bugs (null pointer, type errors)
  • User Input Errors: Validation failures

Error Handling Patterns

async function handle(req, res) {
  try {
    const data = await fetchData()
    res.json(data)
  } catch (error) {
    console.error(error)
    res.status(500).json({ error: 'Server error' })
  }
}

process.on('uncaughtException', (error) => {
  console.error(error)
  process.exit(1)
})

Custom Error Classes

class AppError extends Error {
  constructor(message, statusCode, code) {
    super(message)
    this.statusCode = statusCode
    this.code = code
    this.isOperational = true
  }
}