使用Express
开发Nodejs
服务时,为了统一配置API
请求返回错误,我们可以在Express
中添加错误处理的中间件,用于统一处理接口请求中出现的各种错误信息,以便我们快速定位错误原因。本文简单介绍如何创建一个Express
错误中间件。

定义错误类
首先需要我们根据业务定义几个常规的错误处理类,用于区别错误信息种类,错误类的定义是在项目顶层创建一个error
目录,所有的错误信息都放在该目录下,我这里主要分为如下几种类型错误:
-
NotFondError
:404 -
NoAuthError
:401 -
InternalError
: 500 -
BaseError
:自定义
1、创建Enum.js文件
module.exports = {
StatusCode:{
OK: 200,
NotFond:404,
InternalError:500,
NoAuth:401,
},
ErroMessage:{
NotFond:'当前请求不存在!',
InternalError:'内部服务错误',
NoAuth:'身份为验证',
}
}
2、创建BaseError.js
const Enum = require("./Enum");
class BaseError extends BaseError {
constructor(code,message){
if (!message) {
message = '未知错误';
}
if(!code) {
this.code = Enum.StatusCode.InternalError;
}
super(message);
}
}
3、创建NotFondError.js
const Enum = require("./Enum");
const BaseError = require("./BaseError ");
class NotFondError extends BaseError {
constructor(message){
if (!message) {
message = Enum.ErroMessage.NotFond;
}
super(Enum.StatusCode.NotFond,message);
}
}
4、创建NoAuthError.js
const Enum = require("./Enum");
const BaseError = require("./BaseError ");
class NoAuthError extends BaseError{
constructor(message){
if (!message) {
message = Enum.ErroMessage.NoAuth;
}
super(Enum.StatusCode.NoAuth,message);
}
}
5、创建InternalError.js
const Enum = require("./Enum");
const BaseError = require("./BaseError ");
class InternalError extends BaseError {
constructor(message){
if (!message) {
message = Enum.ErroMessage.InternalError;
}
super(Enum.StatusCode.InternalError,message);
}
}
6、创建index.js
const BaseError = require("./BaseError ");
const NotFoundError = require("./NotFoundError");
const NoAuthError= require("./NoAuthError");
const InternalError= require("./InternalError");
module.exports = {
BaseError ,
NotFoundError ,
NoAuthError,
InternalError,
};
创建中间件
中间件我们通常可以放在同一个文件夹,首先创建一个存放中间件处理的文件夹middleware
,然后就可以创建我们的错误处理中间件了,代码如下:
// middleware/exception.js
const {
BaseError
} = require("../error");
const exception= async (err, req, res, next) => {
const exception = new BaseError();
if (err instanceof BaseError) {
return res.status(err.code).json({
msg: err.message,
code:err.code,
});
}
return res.status(customerError.statusCode).json({
msg: customerError.message,
code:err.code,
err
});
}
module.exports = exception;
添加完中间件后,我们还需要将其添加到express
中,代码如下:
var app = express();
const {
exception
} = require('./middleware');
const {
NotFondError
} = require("../error");
var apisRouter = require('./routes/apis');
app.use('/api', apisRouter);
app.use('/api',function(req, res, next) {
throw new NotFondError();
});
app.use('/api',exception);
使用自定义错误处理
如上已经给出了一个404
错误的示范,直接通过throw
抛出异常即可,当我们在一个接口中需要返回自定义异常可以如下所示:
var express = require('express');
var router = express.Router();
const {
BaseError
} = require("../error");
router.get('/test',function(req,res,next) {
const query = req.query;
if(!query || Object.keys(query).length === 0){
throw new BaseError(403,'该接口query不能为空!');
}
res.status(200).json({
code:200,
message:'请求成功!',
})
})
module.exports = router;
原文始发于微信公众号(胖蔡话前端):express添加错误处理中间件
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/223048.html