tuia-egg-update

tuia-egg framework

Usage no npm install needed!

<script type="module">
  import tuiaEggUpdate from 'https://cdn.skypack.dev/tuia-egg-update';
</script>

README

tuia-egg

tuia-egg framework

QuickStart

  1. yarn global add tuia-cli
  2. tuia-cli init <项目名>
  3. cd <项目名>
  4. yarn
  5. yarn dev

OS Support

  • windows
  • linux
  • macOS

vscode插件(建议安装)

申请容器规范

目录、代码规范

祥见egg目录结构

Use Logger

// 日志级别分为debug info warn error
// app对象(常用于middleware, app生命周期内)
this.app.TuiaLogger.info('category', '日志内容');
// ctx对象(常用于controller, service)
this.ctx.TuiaLogger.info('category', '日志内容');
// 全局使用
global.TuiaLogger.info('category', '日志内容');

Use BiLogger

// 日志不分级别,统一使用info
// group: node日志一般固定10,type: 区分不同需求,json: 具体日志数据.
// app对象(常用于middleware, app生命周期内)
this.app.BiLogger.info({group: 10, type: 1, json: {key: value}});
// ctx对象(常用于controller, service)
this.ctx.BiLogger.info({group: 10, type: 1, json: {key: value}});
// 全局使用
global.TuiaLogger.info({group: 10, type: 1, json: {key: value}});

## Use ERRCODE

```js
// controller(建议在controller书写响应)
// 成功返回
this.ctx.success({
  desc: 'desc',
  data: {
    list: [],
    count: 0
  }
})
// 失败返回
this.ctx.fail({
  error: this.ctx.ERRCODE.SYSTEM_ERROR,
  desc: '重写错误描述'
})

// 如何自定义
// 只要满足error既定的数据结构即可,结构如下
exports.SYSTEM_ERROR = {
  code: 999999,
  desc: '系统错误',
};

Use Eureka

// How to config
// config.default.js

config.eureka = {
  services: ['TUIA-ADVERT-CENTER']
}

// How to use
// service(建议在service中书写具体业务逻辑)

this.app.Eureka.getHost('TUIA-ADVERT-CENTER')

OR

global.Eureka.getHost('TUIA-ADVERT-CENTER')

注意

如果本地启服务注册到开发环境,访问开发环境域名会有流量分流到本地来,请注意!!!

Use Proxy

// config/config.default.js

config.proxy = {
  filter (pathname, req) {
    return pathname.match('^/proxytest') && req.method === 'GET'
  },
  options: {
    // 默认target,实际没有用,因为使用router来做动态target
    target: 'http://www.baidu.com',
    router(req) {
      return global.Eureka.getHost('TUIA-ACTIVITY-WEB')
    },
    pathRewrite: {
      '^/proxytest': ''
    },
    changeOrigin: true
  }
}

Use SSO And JWT/Cookie-Session

验证流程

  • npm run dev
  • 访问http://localhost:3000
  • 走登录->sso登录->登出

使用JWT

  • 框架已将jwt的值存储在localStorage中
  • 请求头需要增加jwt请求头作用户会话校验。比如jwt: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

使用Cookie

  • 服务端直接通过HTTP协议操作Cookie即可

注意

如果使用JWT方案,当用户信息失效(比如修改密码)或提前过期(比如修改用户名、生日等)时,需要前端代码配合清除缓存的jwt从而走重新签发jwt的流程以更新信息。如果使用Cookie-Session方案则清除服务端(或者redis)session即可。

Use Config Center

// https://console.duibadev.com.cn/apollo/#/service/applications/config/tuia-jimu-web-node
// 取对应环境(默认为dev)对应工程(一般对应package.json的name值)的所有配置
let allConfig = global.getFromConfigCenter();
// 取单个配置。返回明文(无论是否加密)
let configValue = global.getFromConfigCenter('key');

Use IP

// config/config.default.js
config.proxy = true;
config.maxProxyCount = 1;

// use ctx
this.ctx.ip         // 获取用户的 IP 地址
this.ctx.host       // 获取用户请求的域名
this.ctx.protocol   // 获取用户请求的协议

Use CORS

// config/plugin.js
exports.cors = {
  enable: true,
  package: 'egg-cors',
};

// config/config.default.js
// 支持跨域域名
exports.security = {
// domainWhiteList: [ 'http://localhost:4200' ],
};
// 支持跨域,若设置origin,则security中的白名单失效
exports.cors = {
// {string|Function} origin: '*',
// {string|Array} allowMethods: 'GET,HEAD,PUT,POST,DELETE,PATCH'
};

Use Cat

class HomeController extends Controller {
  async index() {
    this.ctx.body = 'hi, egg';

    // 获取初始化好的cat对象
    let cat = this.ctx.app.catClient;
    threadCat = new cat.Cat(true);
    //创建一个transaction实例
    const trans = threadCat.newTransaction('TestTran', 'DDD');
    //添加数据
    trans.addData('key', 'value');
    trans.logEvent('EventTransaction', 'E1111');
    const subTrans = a.newTransaction('TestSubTran', 'GGGGG');
    subTrans.addData('subKey', 'subValue');
    trans.setStatus(cat.STATUS.SUCCESS);
    setTimeout(function() {
      trans.complete();
    }, 1000);

    // Event 
    cat.logEvent('Event', 'E1');
    cat.logEvent('Event', 'E2', cat.STATUS.FAIL);
    cat.logEvent('Event', 'E3', 'failed');
    // Error
    cat.logError('ErrorInTransaction', new Error());
  }
}

module.exports = HomeController;

tuia-egg默认已统一监控所有接口请求,自动开启各环境cat,项目中无需配置。