You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Node.js中创建带状态码的自定义错误?

Node.js 自定义带状态码错误的正确用法

你现在的问题出在:写了MyCustomError函数但没把它融入错误处理流程,反而直接在业务代码里硬写res.status()返回响应,等于白写了自定义错误。下面给你一套能落地的实现:

1. 优化自定义错误(推荐用类实现)

你原来的函数写法也能用,但用ES6类继承Error更规范,还能保留错误栈信息:

class MyCustomError extends Error {
  constructor(code, message) {
    super(message);
    this.code = code;
    // 确保错误栈追踪正确
    Error.captureStackTrace(this, this.constructor);
  }
}

module.exports = { MyCustomError };

2. 业务代码里抛出自定义错误

别再直接写响应了,遇到异常直接抛我们的自定义错误:

const { MyCustomError } = require('./你的错误文件路径');

// 比如判断手机号已被占用的场景
if (data.number属于其他用户) {
  throw new MyCustomError(400, `该手机号 ${data.number} 已被其他用户绑定`);
}

3. 加个全局错误处理中间件

在Express的所有路由后面加这个中间件,统一处理所有抛出的错误:

app.use((err, req, res, next) => {
  // 识别我们的自定义错误
  if (err instanceof MyCustomError) {
    return res.status(err.code).send({
      status: false,
      message: err.message
    });
  }

  // 兜底处理未知错误
  res.status(500).send({
    status: false,
    message: '服务器内部错误'
  });
});

这么做的好处是把业务逻辑和响应逻辑分开,所有错误都由中间件统一处理,以后要改响应格式或者错误处理逻辑,只需要改这一处就行,不用在各个业务代码里找来找去。

内容的提问来源于stack exchange,提问作者Pankaj Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 09:15:43