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 全局错误处理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • node连接redis的方法实现

    node连接redis的方法实现

    本文主要介绍了node连接redis的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • Node.js从字符串生成文件流的实现方法

    Node.js从字符串生成文件流的实现方法

    这篇文章主要介绍了Node.js从字符串生成文件流的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • NodeJs通过async/await处理异步的方法

    NodeJs通过async/await处理异步的方法

    本篇文章主要介绍了NodeJs通过async/await处理异步的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • Node版本切换不成功的问题解决

    Node版本切换不成功的问题解决

    使用 Node.js 和 npm 安装 Taro 等工具时,可能会遇到一些环境问题或配置错误,本文就来介绍一下Node版本切换不成功的问题解决,具有一定的参考价值,感兴趣的可以了解一下
    2024-12-12
  • 详解Node.js串行化流程控制

    详解Node.js串行化流程控制

    这篇文章主要介绍了详解Node.js串行化流程控制 ,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • 使用koa2创建web项目的方法步骤

    使用koa2创建web项目的方法步骤

    这篇文章主要介绍了使用koa2创建web项目的方法步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-03-03
  • Node.js学习之地址解析模块URL的使用详解

    Node.js学习之地址解析模块URL的使用详解

    url模块是nodejs里面的一个简单的模块,下面这篇文章主要给大家介绍了关于Node.js学习之地址解析模块URL使用的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-09-09
  • Nodejs中怎么实现函数的串行执行

    Nodejs中怎么实现函数的串行执行

    今天小编就为大家分享一篇关于Nodejs中怎么实现函数的串行执行,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • Node解决简单重复问题系列之Excel内容的获取

    Node解决简单重复问题系列之Excel内容的获取

    这篇文章主要给大家介绍了关于利用Node解决简单重复问题系列之Excel内容获取的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧。
    2018-01-01
  • 基于nodejs的微信JS-SDK简单应用实现

    基于nodejs的微信JS-SDK简单应用实现

    这篇文章主要介绍了基于nodejs的微信JS-SDK简单应用实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-05-05

最新评论