npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@tuia/tuia-egg

v1.6.1

Published

tuia-egg framework

Downloads

6

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

config.sso = {
  // 项目系统id,查找地址是 http://sso.duiba.com.cn/ui#/permissionSystem/applications/appList,输入系统名称后查询前面的ID
  systemId: 214,
  // 项目名
  systemName: 'tuia-jssdk-manage-node',
  // 对应环境上的加密密钥,这里以开发环境为例
  // http://console.duibadev.com.cn/apollo/#/service/applications/tuia-worktable-node/accessKey
  accessKey: 'a6fa0e0307b84d90835fc600fa831c84',
  // 过滤接口,不走sso拦截器用
  filters: []
};

验证流程

  • 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,项目中无需配置。

注意事项:

  1. config.aliyunTest.js不会覆盖config.default.js,需手动添加。

  2. 容器镜像目前状态:

    node8:image-node < node10:cat < node10:dumb-init < node10:gifsicle

    node10:dumb-init 以后包含 dumb-init 版本的镜像,更新 Dockerfile 启动脚本的最后一行为 ENTRYPOINT [“/usr/local/bin/dumb-init”, “node”, “server”] 目的是解决 puppeteerdocker 中运行时的僵尸进程。

  3. cat装包问题,待解决,目前手动解决方案流程

  4. cpu核数根据部署的容器环境而定,假如 APP_CPU 环境变量缺失,默认1核。多核场景需注意定时任务的运用,详见egg定时任务