【Express.js】全局错误处理

这篇具有很好参考价值的文章主要介绍了【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/,这次成功捕获到了异步错误!文章来源地址https://www.toymoban.com/news/detail-495749.html

下一节-中间件

到了这里,关于【Express.js】全局错误处理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 遇到:internal/modules/cjs/loader.js:596 throw err; ^ Error: Cannot find module ‘express‘ 错误应该如何解决

    遇到 \\\"internal/modules/cjs/loader.js:596 throw err; ^ Error: Cannot find module \\\'express\\\'\\\" 错误通常表示在你的代码中无法找到所需的 express 模块。以下是一些可能的解决方法: 确保 express 模块已经正确安装:在终端或命令行中,进入你的项目目录,运行 npm install express 命令来安装 express 模块。

    2024年02月05日
    浏览(47)
  • Vue.js常见错误处理包含代码

    语法错误 错误信息: Error: [vm] \\\"name\\\" is not defined 解决方法:确保组件的 data 中定义了相同的属性。 示例代码: 类型错误 错误信息: Error: [vm] \\\"name\\\" is not a function 解决方法:确保组件的 data 中定义的是一个函数。 示例代码: 模板语法错误 错误信息: Error: [vm] \\\"message\\\" is not d

    2024年02月14日
    浏览(38)
  • Node.js 应用的御用品: Node.js 错误处理系统

    开发中,有些开发者会积极寻求处理错误,力求减少开发时间,但也有些人完全忽略了错误的存在。正确处理错误不仅意味着能够轻松发现和纠正错误,而且还意味着能够为大型应用程序开发出稳健的代码库。 特别是对于 Node.js 开发人员,他们有时会也发现自己使用了不那么

    2024年02月10日
    浏览(52)
  • 【Express.js】express-validator

    express.js 集成 express-validator进行数据校验 在最初的时候,对于请求的数据校验,我们是自定义一个中间件,然后在里面通过最原生的方式检验。在本节,我们将尝试用一种更优雅的方式进行数据校验。 创建一个基础的 express 项目(本文基于evp-express-cli),并支持全局同步和异

    2024年02月13日
    浏览(37)
  • 【Express.js】请求类型

    本节将介绍常见的http请求方式,并站在后端的角度初步感受它们的不同点 GET 意图是 获取 ,不会对服务器上的数据产生影响,将要携带的数据放在 URL 上,通常不带请求体,带了也不一定兼容 POST 意图是 提交 ,通常用于修改和新增服务器上的数据,偏向 新增 ,路径定位较

    2024年02月09日
    浏览(41)
  • Express.js认识

         Express 是 Node.js 老框架,以简单和轻量著称,几行代码就可以启动一个 HTTP 服务器。 市面上主流的 Node.js 框架,如 Egg.js、Nest.js 等都与 Express 息息相关。 Express 框架使用标准 Node.js 语法,主要由以下 3 个核心部分组成: 路由。 中间件。 错误处理。      Express  基本结

    2024年02月21日
    浏览(35)
  • 【Express.js】页面渲染

    常见的页面分为两种,一种是静态页面,比如用 Vue、React 等写好的静态页面,另一种是动态模板页面,如 Thymeleaf,JSP 等。 本节将简要介绍如何在 express 中渲染静态页面,以及适用于 express 的模板引擎 pug 。 写前端的和搞部署的同学应该都清除,页面渲染的用到的 css, js, f

    2024年02月13日
    浏览(45)
  • 【Express.js】集成RabbitMQ

    本节我们介绍在 express.js 中集成 rabbitmq. RabbitMQ 是一个消息队列中间件,常用于请求削峰,事务的队列处理,事件订阅机制的实现等。 创建一个 express.js 项目(本文基于evp-express-cli) 在开发环境下安装rabbitmq 安装amqplib.js: 正常的项目都是分层的,为了避免循环依赖,本文采用

    2024年02月13日
    浏览(33)
  • 【Express.js】集成Redis

    本节我们介绍在 express.js 中集成 redis. Redis是一个高性能的key-value内存数据库,支持事务、队列、持久化等特性,常用于高并发性能场景。 创建一个 express.js 项目(本文基于evp-express-cli) 在开发环境下安装redis 安装redis.js: 正常的项目都是分层的,为了避免循环依赖,本文采用

    2024年02月13日
    浏览(40)
  • 【Express.js】集成SocketIO

    本节我们介绍在如何在 express 中集成 Socket.IO Socket.IO 算是 WebSocket 的一个超集,进行了一些封装和拓展。 创建一个 express.js 项目(本文基于evp-express-cli) 安装socket.io.js: 正常的项目都是分层的,为了避免循环依赖,本文采用代理类构造单例的方式来创建websocket服务器。 wsPro

    2024年02月13日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包