如何在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
相关产品推荐
相关产品推荐

