Express.js 全局错误处理实现

 更新时间:2023年06月19日 14:59:15   作者:Evanpatchouli℃  
本文主要介绍了Express.js 全局错误处理实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

全局错误处理

在前面几节里,我们处理异常的方法都是手动在可能引发异常的地方捕捉错误,这固然是必要的,可以有针对性得处理异常,但很多时候,有许多潜在的异常,有一句话叫永远不要相信输入的数据,你永远都不知道什么时候可能会以什么方式触发某些阴间异常从而造成系统崩溃。因此,我们需要有一位好帮手能帮助我们捕获各种错误

而这位好帮手就是,异常处理中间件

自定义异常处理中间件

同步异常

异常处理中间件需要传入4个参数: err,req,res和next,这样才会被express识别为异常处理中间件
创建一个exhandler,并挂载到服务器上:
注意: 挂载异常处理中间件的行为必须位于所有定义的接口之下,至于理由,会在下一节《中间件》中给出解答

let exhandler = (err, req, res, next)=> {
    console.error('Error:', err.message);
    res.status(500).json(err);
}
app.use(exhandler);

我们在helloWorld接口中人为抛出一个异常试一下,可以直接throw,也可以传递给next(事实上,意外的异常发生时,会被express捕获并传递给next,然后再丢给我们的异常处理中间件)

app.get('/', (req, res, next)=> {
    const err = new Error();
    err.name = '无法访问';
    err.message = '对不起,网站正在维护中';
    // next(err);
    throw err;
});

测试

使用api调试工具GET 127.0.0.1:8080/,我们的程序不会崩溃,并且你将得到被封装好的错误信息,并且响应码是500。

{
    "name": "无法访问",
    "message": "对不起,网站正在维护中"
}

异步异常

上面的异常是产生在串行的代码中的,那如果在异步操作中产生了异常呢?
我们弄一个异步异常的接口试一下:

app.post('/', async (req, res, next)=> {
    res.send(await error()).end();
});
function error() {
    let err = new Error('网站维护');
    err.message = "自定义的错误";
    return Promise.reject(err);
}

POST 127.0.0.1:8080/,程序报错,之前的中间件并未捕获到这个错误。

可以手动在处理函数内加上 try-catch 语句块,但这样比较繁琐,一个更方便的方法是使用 express-async-errors:

npm i express-async-errors

然后引入即可:

require('express-async-errors');

POST 127.0.0.1:8080/,这次成功捕获到了异步错误!

到此这篇关于Express.js 全局错误处理实现的文章就介绍到这了,更多相关Express 全局错误处理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 在koa中简单使用Websocket连接的方法示例

    在koa中简单使用Websocket连接的方法示例

    本文主要介绍了在koa中简单使用Websocket连接的方法示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • Mac node删除以及重新安装案例详解

    Mac node删除以及重新安装案例详解

    这篇文章主要介绍了Mac node删除以及重新安装案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-09-09
  • Node.js 多线程完全指南总结

    Node.js 多线程完全指南总结

    这篇文章主要介绍了Node.js 多线程完全指南总结,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-03-03
  • 解决node.js含有%百分号时发送get请求时浏览器地址自动编码的问题

    解决node.js含有%百分号时发送get请求时浏览器地址自动编码的问题

    这篇文章主要介绍了解决node.js含有%百分号时发送get请求时浏览器地址自动编码的问题,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-11-11
  • Node.js 使用命令行工具检查更新

    Node.js 使用命令行工具检查更新

    这篇文章主要介绍了Node.js 使用命令行工具检查更新的方法,使用Node.js开发命令行工具是开发者应该掌握的一项技能,适当编写命令行工具以提高开发效率,有需要的小伙伴可以参考下
    2017-06-06
  • 基于Node.js的大文件分片上传示例

    基于Node.js的大文件分片上传示例

    这篇文章主要介绍了基于Node.js的大文件分片上传示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-06-06
  • Node实现搜索框进行模糊查询

    Node实现搜索框进行模糊查询

    这篇文章主要为大家详细介绍了Node实现搜索框进行模糊查询,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • NodeJs实现简易WEB上传下载服务器

    NodeJs实现简易WEB上传下载服务器

    这篇文章主要为大家详细介绍了NodeJs实现一个简易WEB上传下载服务器,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-08-08
  • node实现简单的增删改查接口实例代码

    node实现简单的增删改查接口实例代码

    在本篇文章里小编给大家整理的是关于node实现简单的增删改查接口的相关实例内容,有需要的朋友们可以学习下。
    2019-08-08
  • 基于node.js制作简单爬虫教程

    基于node.js制作简单爬虫教程

    这篇文章主要为大家详细介绍了基于node.js制作简单爬虫的教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06

最新评论