Skip to content

Jack-rainbow/koa-cli

Repository files navigation

koa-cli

安装

yarn global koa-generator

启动

yarn

yarn dev

目录结构

├─ .babelrc
├─ .env
├─ .gitignore
├─ README.md                                 
├─ app.js
├─ bin
    ├─ start.js
    └─ www
├─ config                                 sql/log配置文件
    ├─ database.js
    ├─ log.js
    └─ signale.js
├─ controllers                             业务层(接口逻辑)
├─ logList                                 输出日志目录
├─ middleware                              koa的中间件
    ├─ error                              
        ├─ constants.js                    错误码
        ├─ customError.js                  自定义错误
        ├─ errorMsg.js                     错误mes
        └─ response.js                     统一res返回格式
    ├─ exception.js                         异常处理
    ├─ http-exception                       自定义错误格式
        └─ index.js
    └─ logs                                 日志配置文件
           ├─ access.js
           ├─ index.js
           └─ logger.js
├─ modules                                模块文件
    ├─ index.js
    └─ models
├─ package.json
├─ routes                                 自动注册路由文件
    └─ index.js
├─ schema                                 ORM

TODO

  • 测试框架
  • 集成swagger
  • 网关方案
  • 线上热更新
  • 线上热部署
  • 线上监控
  • pm2
  • 鉴权
  • 异常处理
  • 错误日志
  • 路由自动注入
  • 路径别名

接口规范

描述 接口 方法 url 参数 备注
id Y Y Y

⬆ Back to Top

跨域

⬆ Back to Top

路由自动注入

路由注入

  • 插件:require-directory
import requireDirectory from 'require-directory';
import Router from 'koa-router';


class InitManager {
    static initCore(app) {
        //把app.js中的koa实例传进来
        InitManager.app = app;
        InitManager.initLoadRouters();
    }
    //全局注册路由
    static initLoadRouters() {
        const apiDirectory = `../controllers` //目录
        requireDirectory(module, apiDirectory, {
            visit: whenLoadModule
        });
        
        function whenLoadModule(obj) {
            if (obj instanceof Router) {
                InitManager.app.use(obj.routes(), obj.allowedMethods())
            } 
        }
    }
}
module.exports = InitManager;

⬆ Back to Top

日志模块

  • 插件:log4js
  • 日志配置文件:
    • config/log.js
  • 日志使用
    • 1.根据设置的env文件打出日志
      • 1.1 env为dev/local/development控制台输出日志
      • 1.2 其他配置文件输出日志
      • 1.3 输出目录自动配置

⬆ Back to Top

ORM

  • Schema是一种以文件形式存储的数据库模型骨架

插件

sequelize

Schema中的数据类型

  • String :字符串类型
  • Number :数字类型
  • Date : 日期类型
  • Boolean: 布尔类型
  • Buffer : NodeJS buffer 类型
  • ObjectID : 主键,一种特殊而且非常重要的类型
  • Mixed :混合类型
  • Array :集合类型

⬆ Back to Top

redis

⬆ Back to Top

RPC

⬆ Back to Top

线上部署

⬆ Back to Top

线上日志

⬆ Back to Top

异常处理

  • 日志配置文件:
    • core/error/customError.js
  • 日志使用
    • 当有异常请求的时候自动输出日志 参考链接
  • 使用方法
import {
  CustomError,
  HttpError
} from './middleware/error/customError'
import constants from './middleware/error/constants'
router.get('/customError', (ctx, next) => {
  throw new CustomError(constants.CUSTOM_CODE.SOME_CUSTOM_ERROR)
})

⬆ Back to Top

登录处理

⬆ Back to Top

搭建开发环境

  • nodemon 检测文件变化,自动重启 node
  • cross-env 兼容 mac linux 和 windows 的环境变量
  • node使用import
require('babel-register')
({
    plugins: ['babel-plugin-transform-es2015-modules-commonjs'],
})
module.exports = require('./app.js')// 入口文件

目录别名

参数校验

  • 采用koa-parameter
  • 同理joi也可以,更完美,但是koa-parameter更完美,更符合我的业务需求

⬆ Back to Top

About

自己写的koa-cli

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published