Express错误处理中间件的参数使用

3 篇文章 0 订阅
2 篇文章 0 订阅

Express中,错误处理通过特殊的中间件来完成。如前所述,一般中间件的参数为3个:req,resnext。如果你use一个4个参数的中间件,它将被Express视为错误处理中间件。下面便是一个错误处理中间件,当出于开发环境时使用:

// file: app.js
if (app.get('env') === 'development') {
    app.use(function(err, req, res, next) {
        res.status(err.status || 500); // 状态码默认为500(服务器内部错误)
        res.render('error', {
            message: err.message,
            error: err    // 生产环境中应设为 `error: {}`,禁止输出错误
        });
    });
}

 提示

这里的res.render将第二个参数指定的数据传递给第一个参数指定的模板error.hbs,得到HTML并返回给浏览器。这个过程成为渲染,下一节课我们详细介绍。

错误处理中间件何时会执行呢?当然是当错误发生时。你需要手动地将错误传递给错误处理中间件。不妨在app.js中创建如下的中间件来测试错误处理:

// file: app.js
app.get('/throw/error', function(req, res, next){
    var err = new Error('i am an error');
    next(err);
});

访问localhost:3000/throw/error,将会触发该控制器,进而触发错误处理中间件。中间件的第三个参数next为下一个中间件。还记得吗?中间件是一个队列,如果一个中间件未能处理完该请求,请通过调用next()来交给下一个中间件。

  • 如果带不带参数调用(如next())则会传递给下一个普通中间件;
  • 如果带参数调用(如next(err))则会传递给下一个错误处理中间件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值