2.7 错误处理 🎉
...大约 1 分钟
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