持续创作,加速成长!这是我参与「掘金日新计划 · 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)
}
})
可以看到成功的报错。
方法使用
我们先将上面的这个错误进行转换处理,添加 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)
})
可以看到错误被监听到,统一进行处理。
总结
学习了 Express 的 错误处理中间件,使我们可以统一处理错误问题。