express添加错误处理中间件

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

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!