跳至主要內容

2.7 错误处理 🎉

刘春龙...大约 1 分钟NODEJSNODE后端express

2.7 错误处理 🎉

Express有内置的错误处理器来捕获并且处理程序抛出的异常。

同步代码抛出异常,Express会自动捕获

app.get('/',function(req,res){
    throw new Error('错误信息') //Express将会自动捕获
    res.send('hello,baizhan')
})

异步代码抛出异常,必须通过调用next()方法传递错误信息到Express

app.get('/', function (req, res, next) {
    fs.readFile('./input.txt', function (err, data) {
        if (err) {
            next(err) // 需要调用Next方法传递错误信息到Express
        } else {
            res.send(data)
        }
    })
})
app.get('/', function (req, res, next) {
    setTimeout(function () {
        try {
            throw new Error('错误信息')
        } catch (err) {
            next(err)
        }
    }, 100)
})

为什么用next()方法传递错误信息到Express

要想让Express的默认错误处理器处理异常,我们需要保证Express能接收到错误。

如果错误信息没有被捕获,则Express会关闭连接,请求会失败。

自定义错误处理器 💎

我们可以像定义中间件那样去定义错误处理器。区别在于,错误处理器可以有四个参数 (err, req, res, next)

var express = require('express')
var app = express()
var user = require('./user')
app.use('/', user)
// 错误处理器 (要放到挂在路由之后,否则不生效)
app.use(function (err, req, res, next) {
    res.status(500).send({
        message: "服务器出错了",
        errorInfo: err.stack
    })
})
app.listen(3030, function () {
    console.log('服务器正在监听3030端口')
})

提示

自定义错误处理器的优先级要高于Express内置的错误处理

上次编辑于:
贡献者: 刘春龙
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.7