Node.js 错误统一处理

我们在写Node时,经常会碰到一些需要处理的服务器错误。比如,读取文件,查询数据库等等。

最简单的处理方式就是,下面这种方法

var express = require('express')
var fs = require('fs')


var app = express()

app.get('/', function (req, res, next) {
    fs.readFile('./abc', function (err, data) {
        if (err) {
            return res.status(500).send('Server Error')
        }
    })
})

app.listen(3000, function () {
    console.log('app is running at port 3000.')
})

但是,如果,有很多的地方,都要处理‘err’的话,这个代码就要重复很多次。这不利于我们敲代码和后期维护。

所以,我们可以把所有的错误,统一处理。

原理:中间件。

上面的案例,我们可以这样改。

var express = require('express')
var fs = require('fs')

var app = express()

app.get('/', function (req, res, next) {
    fs.readFile('./abc', function (err, data) {
        if (err) {
            // 当调用 next 的时候,如果传递了参数,则直接往后找到带有 四个参数的应用程序级别中间件
            // 当发生错误的时候,我们可以调用 next 传递错误对象
            // 然后就会被全局错误处理中间件匹配到并处理之
            next(err)
        }
    })
})

// 配置错误处理中间件
app.use(function (err, req, res, next) {
    res.status(500).send(err.message)
})

app.listen(3000, function () {
    console.log('app is running at port 3000.')
})

这样,每当,我们需要处理‘err’的时候,可以直接调用   next(err),将请求下发至错误处理中间件。

注意:这时在写回调方法的时候,需要传三个参数(req,res,next)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值