Egg.js使用注意点

一、MySql事务

sql事务,保证所有sql执行成功,避免出现断档

    const client = app.mysql.get('default');
    const conn = await client.beginTransaction();

    try {
      // 1.执行SQL
      await conn.select('process'{ where: { batchId: item } });
      await conn.select('process'{ where: { batchId: item } });
      await conn.select('process'{ where: { batchId: item } });
      return await conn.commit();
    } catch (err) {
      // 2.执行出错,撤销操作
      conn.rollback();
      return err;
    }

二、路由级中间件

中间件可用来统一处理请求,例如鉴权,判断等录状态,日志处理,或其它业务
通过中间件中ctx对象与next对象即可对业务逻辑进行处理与控制。
路由级中间件可以为每个路由单独挂载中间件

  • 编写中间件 app/middleware/checkPermission.js
module.exports = (options) => {
  return async (ctx, next) => {
    console.log('测试中间件1');
    await next();
    console.log('测试中间件2');
  };
};
  • 挂载中间件 router.js
  const checkPermission = app.middleware.checkPermission();
  router.get('/api/test', checkPermission, controller.api.test);
  • 编写 controller/api/test.js
async test() {
    console.log("测试中间件3");
    ctx.body = "23333"
  }
  • 执行结果 输出
测试中间件1
测试中间件3
测试中间件2

三、应用级中间件

应用级中间件会挂载到全局,每个路由都会被拦截,处理逻辑同上

  • 挂载中间件 config/config-default.js
config.middleware = ['checkPermission', 'requestLoger'];

将会处理并拦截所有request。

四、request字符类型处理

egg.js默认使用koa-bodyParser处理request.body的数据,但当数据出现text/plain,text/json时会解析为空,需要手动添加类型进行兼容。

  • config/config-default.js
 config.bodyParser = {
    jsonLimit: '1mb',
    formLimit: '1mb',
    enableTypes: ['json', 'form', 'text'],
    extendTypes: {
      text: ['text/plain', 'application/json', 'text/json'],
    },
  };

五、Egg各模块调用规则

  • Controller之间无法互相调用
  • Controller可以自由调用任何Service
  • Service之间可以任意调用

六、防SQL注入

在egg.js中,所有查询都应该通过egg-mysql中的 select , insert , update 方法去实现数据库操作,若必须使用运用SQL语句进行操作,需要使用 mysql.escape() 方法对所有传入的动态参数进行转义。

const params = {
   age:18,
   sex:'boy'
}

const client = app.mysql.get('default');

const sql = `select * from table_name where age = ${mysql.escape(params.age)} and sex = ${mysql.escape(params.sex)};`

const result = await client.query(sql);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在egg.js使用jwt中间件,首先需要进行全局安装egg-jwt插件。您可以使用以下命令进行安装:npm install egg-jwt -S。 然后,在项目的config/plugin.js文件中添加jwt插件的配置: jwt: { enable: true, package: 'egg-jwt', }[3。 完成以上配置后,您可以在需要使用jwt的地方引入jwt中间件,并进行相关的鉴权操作。可以根据您的需求,在egg.js中实现简单登录、用户信息获取、图片上传、增删改查等功能。 请注意,以上提供的是使用jwt中间件的基本步骤,具体实现还需要根据您的项目需求进行相应的配置和编码。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Egg.js使用jwt](https://blog.csdn.net/LizequaNNN/article/details/120457405)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [egg.js 配合 jwt 进行鉴权](https://blog.csdn.net/weixin_38992765/article/details/123754845)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值