egg 异常处理和中间件

本文介绍了Egg.js框架中错误和异常的处理方法,包括自定义中间件`error_handler.js`用于捕获并处理异常,以及通过`config_default.js`配置中间件的行为。同时,文章提到了参数验证插件`egg-valparams`的使用,展示了如何在控制器中进行参数验证,并处理验证失败的情况。
摘要由CSDN通过智能技术生成

egg 异常处理和中间件

一、错误和异常处理

// app/middleware/error_handler.js
module.exports = (option, app) => {
    return async function errorHandler(ctx, next) {
      try {
        await next();
      } catch (err) {
        // 所有的异常都在 app 上触发一个 error 事件,框架会记录一条错误日志
        ctx.app.emit('error', err, ctx);
  		
  		// 发生错误时 捕获异常
    };
  };

二、中间件

// config/config_default.js
config.middleware = ['errorHandler'];
config.errorHandler = {
    ceshi: 123,
    // 通用配置(以下是重点)
    enable:true, // 控制中间件是否开启。
    match:'/news', // 设置只有符合某些规则的请求才会经过这个中间件(匹配路由)
    ignore:'/shop' // 设置符合某些规则的请求不经过这个中间件。

    /**
        注意:
        1. match 和 ignore 不允许同时配置
        2. 例如:match:'/news',只要包含/news的任何页面都生效
        **/

    // match 和 ignore 支持多种类型的配置方式:字符串、正则、函数(推荐)
    match(ctx) {
        // 只有 ios 设备才开启
        const reg = /iphone|ipad|ipod/i;
        return reg.test(ctx.get('user-agent'));
    },
};

3. 参数验证

插件地址: https://www.npmjs.com/package/egg-valparams

npm i egg-valparams --save
// config/plugin.js
valparams : {
  enable : true,
  package: 'egg-valparams'
},
// config/config.default.js
config.valparams = {
    locale    : 'zh-cn',
    throwError: false
};
class XXXController extends app.Controller {
  // ...
  async XXX() {
    const {ctx} = this;
    ctx.validate({
      system  : {type: 'string', required: false, defValue: 'account', desc: '系统名称'},
      token   : {type: 'string', required: true, desc: 'token 验证'},
      redirect: {type: 'string', required: false, desc: '登录跳转'}
    });
    // if (config.throwError === false)
    if(ctx.paramErrors) {
      // get error infos from `ctx.paramErrors`;
    }
    let params = ctx.params;
    let {query, body} = ctx.request;
    // ctx.params        = validater.ret.params;
    // ctx.request.query = validater.ret.query;
    // ctx.request.body  = validater.ret.body;
    // ...
    ctx.body = query;
  }
  // ...
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值