3.2.52 • Published 3 years ago

ukoa v3.2.52

Weekly downloads
83
License
MIT
Repository
github
Last release
3 years ago

UKOA (Node.js 服务器框架, 里面内容涉及特殊业务逻辑, 请谨慎使用)

Install

npm install ukoa

Use

const { Ufo } = require('ukoa');

const runServer = async () => {
  const ufo = new Ufo({
    baseDir: __dirname,
    consul_url: '',
    consul_token: '',
    consul_type: '',
    consul_category: '',
    try_catch_url: '',
    try_catch_token: ''
  });
  await ufo.init();
  // ufo.useDynamic(require('./server/mv/xxx')()); 引入某个中间件
  await ufo.start();
};

runServer();

Documents

consul存储配置文件

consul配置文件以json格式存储,一般格式包括:

{
    "token": "xxx",
    "type": "Web",
    "name": "Web.sss",
    "svc_url": "xxxx.xx.com",
    "svc_port": 80,
    "port": 3000,
    "version": "v1",
    "http" : {

    },
    "mysql":{

    }
}

内置常用模块

避免重复依赖,常用模块请使用ukoa提供的.

const {Ufo, Controller, Joi, lodash, moment, humps, axios, curl, ufoCurl } = require('ukoa');

内置中间价

ufo 内置集成以下中间价

systemCatch           // 捕获系统错误
koa2-cors             
koa-json
koa-bodyparser
appWithCtx            // app下挂载ctx app.ctx
changeRoutePath       // 根据Action以及参数改变路由, 暂时支持 doc, dynamicAction 等
mergeParams           // 合并参数 req.mergeParams = _.merge({}, req.query, req.body);
internalCall          // 内部各个Action相互调用 ctx.internalCall(Action, params)
checkResponse         // 返回值检查
checkOwnData          // 检查是否携带应该携带的参数
checkAction           // 检查系统是否允许该Action

中间件

全局中间件

ufo.use(fn);

本项目动态路由action中间件

ufo.dynamicMv(fn);

gateway项目

若是gateway项目,请开启以下配置

ufo.proxy = true

路由router

ukoa 提供一下路由文件,可使用 ufo.router 方法添加其他路由文件。 ctx.path === '/'的请求, 会根据请求字段'Action'去智能匹配到以下路由'/proxy/:app/:Action', '/dynamic/:Action'.

ufo.router
  .get('/HeartBeat', mv)
  .get('/Restart', mv)
  .all('/docs/:Action', mv)
  .all('/dynamic/:Action', mv)

配置初始化

初始化配置文件、各种中间件配置操作,可传入参数配置, 默认配置如下:

ufo.init({
  mv: {
    'systemCatch': {enable: true},
    'koa2-cors': { origin: ctx => ctx.headers.origin, credentials: true },
    'koa-json': {},
    'koa-bodyparser': { formLimit: '50mb', jsonLimit: '50mb' },
    'appWithCtx':{enable: true},
    'changeRoutePath':{enable: true},
    'mergeParams':{enable: true},
    'internalCall':{enable: true},
    'checkResponse':{enable: true},
    'checkOwnData': { enable: false, key: 'ownData' },
    'checkAction':{enable: true},
  }
})

Controller

Controller 继承ukoa的Controller

const { Controller, Joi } = require('ukoa');

class Example extends Controller { init(ctx) { this.schema = {}; // 参数校验,Joi模型 this.cache = true; // 需在config里面配置 cache_api:{url, token} 并且在 controller init() 函数里面,将cache = true, 若要配置cache 参数, cache = {TTL: 3600, Count: 100}; this.docs = {}; // 文档 }

// 执行函数体 async main(ctx) { this.total = 0; // 数据总量,用于分页显示总量信息 return this.ok = {}; // 数据内容 return this.error = 'xxx error'; // 数据错误描述 } }

module.exports = Example;

### ufoCurl调用http
> ufoCurl 提供http调用,将http结果剥离,形成 [Data, isError, Total] 模式

ctx.app.ufoCurl(url, entity, config, options); config = { throw: false // 是否有错误立马抛出 key: "Data" // 结果key字符串为‘Data’, total: "Total" // 数量的字符串为‘Total’, pick: [] // 结果为自己pick的内容 }

### cacheMap内存缓存有效期数据
> 对于一些需要缓存在内存中、按时刷新的内容,可以使用cacheMap, 默认 60 * 1000 ms
```js
module.exports = options => async (ctx, next) => {
  if (!ctx.cacheMap) ctx.cacheMap = ctx.app.cacheMap;
  const { cacheMap } = ctx.app;

  if (!cacheMap.has('cacheBody')) {
    cacheMap.set('cacheBody', async ()=>{ return 'hello world' }, 1000 * 20);
  }
  await next();
};

// 使用
await ctx.cacheMap.get('cacheBody') // hello world

文档

  • 在配置文件config中,应该指定doc_url, 文档目录为: http://docs.example.com/?__view_docs=true&Action=*
  • 在参数中指定 __view_docs=true, 即可获取API操作文档。
  • 请求参数添加 "__save_docs":true, 即可保存API调用为文档。
{
  "doc_url": "http://docs.example.com/?__view_docs=true&Action="
}

DEBUG

env 添加DEBNUG,可以打印对应log,方便排查问题,现在支持以下DEBUG

# 打印所有log
DEBUG: ufo:*
# 打印其他
DEBUG: ufo:curl:*   //打印某个Action的请求
DEBUG: ufo:checkResponse
DEBUG: ufo:mergeParams
DEBUG: ufo:consul
DEBUG: ufo:cacheMap

scripts

内置执行脚本

yarn lint         // eslint --fix ./
yarn cmd 
3.2.52

3 years ago

3.2.51

4 years ago

3.2.50

4 years ago

3.2.49

4 years ago

3.2.48

4 years ago

3.2.47

4 years ago

3.2.46

4 years ago

3.2.45

4 years ago

3.2.44

4 years ago

3.2.43

4 years ago

3.2.42

4 years ago

3.2.41

4 years ago

3.2.40

4 years ago

3.2.39

4 years ago

3.2.38

5 years ago

3.2.37

5 years ago

3.2.36

5 years ago

3.2.35

5 years ago

3.2.34

5 years ago

3.2.33

5 years ago

3.2.32

5 years ago

3.2.30

5 years ago

3.2.29

5 years ago

3.2.28

5 years ago

3.2.27

5 years ago

3.2.26

5 years ago

3.2.25

5 years ago

3.2.24

5 years ago

3.2.23

5 years ago

3.2.22

5 years ago

3.2.21

5 years ago

3.2.20

5 years ago

3.2.19

5 years ago

3.2.18

5 years ago

3.2.17

5 years ago

3.2.16

5 years ago

3.2.15

5 years ago

3.2.14

5 years ago

3.2.13

5 years ago

3.2.12

5 years ago

3.2.11

5 years ago

3.2.10

5 years ago

3.2.9

5 years ago

3.2.8

5 years ago

3.2.7

5 years ago

3.2.6

5 years ago

3.2.5

5 years ago

3.2.4

5 years ago

3.2.3

5 years ago

3.2.2

5 years ago

3.2.1

5 years ago

3.2.0

5 years ago

3.1.18

5 years ago

1.1.17

5 years ago

1.1.16

5 years ago

1.1.14

5 years ago

1.1.13

5 years ago

1.1.12

5 years ago

1.1.11

5 years ago

1.1.10

5 years ago

1.1.9

5 years ago

1.1.8

5 years ago

1.1.7

5 years ago

1.1.6

5 years ago

1.1.5

5 years ago

1.1.4

5 years ago

1.1.3

5 years ago

1.1.2

5 years ago

1.1.1

5 years ago

1.1.0

5 years ago

1.0.9

5 years ago

1.0.8

5 years ago

1.0.7

5 years ago

1.0.6

5 years ago

1.0.5

5 years ago

1.0.4

5 years ago

1.0.3

5 years ago

1.0.2

5 years ago

1.0.1

5 years ago

1.0.0

5 years ago