基于koa封装的服务端开发脚手架

143 阅读2分钟

@nfly实现了什么?

  • 轻量高效易于扩展。
  • 依赖性典型的面向切面编程思想
  • 参数获取方便快捷
  • 基于typeorm的使用扩展方便操作数据库
  • middleware的配置加载顺序
  • 环境变量
  • ts支持
  • 支持单测

脚手架 @nfly/cli

全局安装 pnpm add @nfly/cli --global

然后创建模版工程

image.png

核心模块 @nfly/core

import { createNFly } from '@nfly/core';
import { registerRouter } from '@nfly/router';


(async function _() {
  # 创建服务 
  createNFly({
    port: 8008,
    root: __dirname,
    router: registerRouter('/api'),
    bodyOptions: {},
    callback() {
      console.log('app server');
    },
    useLogger: true,
  }).start();
}());

路由模块 @nfly/router

服务启动入口 server.ts

# 路由注册入口
import { createNFly } from '@nfly/core';
import { registerRouter } from '@nfly/router';

# 此处省略代码
.....

 createNFly({
    port: 8008,
    root: __dirname,
    router: registerRouter('/api'),
    bodyOptions: {},
    callback() {
      console.log('app server');
    },
    useLogger: true,
  }).start();

controller文件 Pay.ts

import Koa from 'koa';
# 此处导入注册路由的方法 和解析路由上query和params的方法
import {
  GET, Body, Service, Path, Query, Params, Before,
} from '@nfly/router';
import { BaseController, IContext } from '@nfly/core';
import HomeService from '../../service/Home';

function Test(target: any, key: symbol|string, des: any) {
  const old = des.value;
  // eslint-disable-next-line no-param-reassign
  des.value = async function (...args: any) {
    console.log('func start');
    await old.apply(this, args);
    console.log('func end');
  };
}
@Before(async (ctx) => {
  console.log('21212333444');
  // ctx.body = '3333';
  // return !0;
})
class Home extends BaseController {
  // @Service(HomeService)
  //   homeServer!: HomeService;
  @Test
  @GET('/:aa')
  async index(@Query() a: string, @Params('aa') c: string) {
    // const list = await this.homeServer.getName();
    this.ctx.json({
      aaa: a,
      c,
      // list,
    });
  }
}

export default Home;

orm模块 @nfly/orm

快速创建工程

依赖安装mysql

  • 启动链接本地的3306端口启动的mysql
  • 建photo表

启动

pnpm add @nfly/cli --global
npm install @nfly/cli -g
yarn add @nfly/cli --global
nfly # 进入交互模式创建工程
cd xxx
yarn install

# 启动
yarn dev
# or
pnpm dev

# 访问
http://localhost:8008/api/user/123?name=jack&age=100

工程目录结构

.
├── dist  //npm run build 构建产物
├── package.json
├── pnpm-lock.yaml
├── src // 源码文件目录
│   ├── config // 配置文件
│   │   ├── development.ts  // 开发环境配置
│   │   └── production.ts  // 生产环境配置
│   ├── controller  // controller 目录 路由和参数校验
│   │   └── Home
│   │       └── index.ts
│   ├── index.ts  // 服务启动入口 路由注册 服务创建
│   ├── middleware // 中间件
│   │   └── view.ts
│   ├── modal  // orm映射modal
│   │   └── home.ts
│   └── service // service sql增删改查操作
│       └── Home
│           └── index.ts
├── tsconfig.json
├── yarn-error.log
└── yarn.lock