Express-学习之路 04,错误处理中间件

236 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第4天,点击查看活动详情

Express-学习之路 04,错误处理中间件

引言

本系列会以我的一个理解,来介绍并开始学习 Express

中间会插入自己所联系到的 乱七八糟 的 知识点

错误处理中间件

看到这个中间件的名字,我们就可以知道它的作用,主要是为了处理服务端这边所产生的异常。

如果在未使用这个中间件的情况下,可能每个请求过来到达服务器时,内部都要写一份 try catch 来进行异常的捕获。

返回错误处理的状态码 res.status(500),以及错误信息,错误问题记录数据库等一系列操作。

如果每个请求都写一遍 catch 操作,那么代码的就会很混乱,一点也不简洁。所以还是要通过 错误处理中间件 统一处理错误问题,进行返回。

当然这个 错误处理中间件 的位置就是在 所有的 中间件 后面进行挂载。

方法介绍

这个中间件,我们将其放在 app.js 中的末尾,它的函数是有四个参数所组成。

app.use((err,req,res,next)=>{})

当然我们只写这一行是不行的,我们需要在每个请求中的 catch 位置中,去获取错误问题,之后通过 next(err) 的方式,将其传入到 错误处理中间件 中,下面拿一个请求举个例子。

我们在请求里,使用 node 内置的 fs,去获取一个不存在的文件,将其产生报错

const express = require('express')
const fs = require('fs')

// 创建路由实例
const router = express.Router()

// 配置路由
router.get('/', (req, res) => {
  try {
    fs.readFile('./a')
    res.send('hello Express')
  } catch (err) {
    console.log('111')
    console.log(err)
  }
})

image.png

可以看到成功的报错。

方法使用

我们先将上面的这个错误进行转换处理,添加 next,使用 next(err) 将其向下执行。

// router.js

router.get('/', (req, res, next) => {
  try {
    fs.readFile('./a')
    res.send('hello Express')
  } catch (err) {
    next(err)
  }
})

之后,放到 错误处理中间件 中即

// app.js

// 错误处理中间件
app.use((err, req, res, next) => {
  console.log('err', err)
  res.send(500)
})

image.png

可以看到错误被监听到,统一进行处理。

总结

学习了 Express错误处理中间件,使我们可以统一处理错误问题。