Options
All
  • Public
  • Public/Protected
  • All
Menu

@tosee/misc

Open in Visual Studio Code Build Status codecov NPM version

Misc

基于Koa与Typescript构建的框架

快速开始

  1. 安装命令行工具
    npm i @tosee/misc-cli -g
    
  2. 初始化项目并运行
    mkdir project
    misc new ./project
    cd project
    npm run dev

配置项

Misc继承自Koa,实例化Misc时可以传入不同的参数来配置Koa实例,Misc自带koa-bodyparser,@koa/cors依赖,可以通过不同的配置来实现不同的功能,具体的参数细节查看API

keys

Koa 的 cookie 签名秘钥

beforeall

中间件数组,Misc会使用koa-compose组合数组中的中间件,这些中间处于koa-bodyparser,@koa/cors之后(如果有配置的话),routerpath目录中的各路由之前。

routerpath

Misc会加载该配置目录及其子目录下的所有ts文件,并获取它们的默认导出(export default),如果是koa-router实例(使用@Controller装饰器)则Misc会加载这些实例,默认路径src/router

body

koa-bodyparser配置选项,参照koa-bodyparser

protocol(必须)

可选 http 或 https,选择 https 时则必须配置 tls 选项。

tls

https 配置,详见https 参数

cors

跨域配置,使用@koa/cors,参照@koa/cors

port(必须)

监听端口号。

装饰器

@Controller

路由类装饰器,实例化类时转化为一个koa-router实例,作用类似于prefix,例:

@Controller('/hello');
class Test{

}

@GET

路由方法装饰器,与@Controller配合,实现一个 get 方法的路由,例:

@Controller('/hello');
class Test{
@GET('/test')
async test(){
return 'hello world';
}
}

@POST

路由方法装饰器,与@Controller配合,实现一个 post 方法的路由,例:

@Controller('/hello');
class Test{
@POST('/test')
async test(@Body body){
return body;
}
}

@PUT

路由方法装饰器,与@Controller配合,实现一个 put 方法的路由,例:

@Controller('/hello');
class Test{
@PUT('/test')
async test(){

}
}

@DELETE

路由方法装饰器,与@Controller配合,实现一个 delete 方法的路由,例:

@Controller('/hello');
class Test{
@DELETE('/test')
async test(){

}
}

@Body

参数装饰器,配合@POST,@GET,@PUT,@DELETE等方法装饰器时可以获取请求参数,该装饰器默认值为ctx.request.body,例:

@POST('/test')
async test(@Body body){
return body;
}

@Query

参数装饰器,配合@POST,@GET,@PUT,@DELETE等方法装饰器时可以获取请求参数,该装饰器默认值为ctx.request.query,例:

@GET('/test')
async test(@Query query){
return query;
}

@Headers

参数装饰器,配合@POST,@GET,@PUT,@DELETE等方法装饰器时可以获取请求参数,该装饰器默认值为ctx.request.headers,例:

@GET('/test')
async test(@Headers headers){
return headers;
}

@Headers

参数装饰器,配合@POST,@GET,@PUT,@DELETE等方法装饰器时可以获取请求参数,该装饰器默认值为ctx.params,例:

@GET('/test/:id')
async test(@Params params){
return params.id;
}

@Ctx

参数装饰器,配合@POST,@GET,@PUT,@DELETE等方法装饰器时可以获取请求参数,该装饰器默认值为ctx,例:

@GET('/test/:id')
async test(@Ctx ctx){
return ctx.params.id;
}

@Validate

参数验证装饰器,使用class-validator实现,传入 schema 即可完成校验,支持自定义错误处理。

使用该装饰器后,参数装饰器获取的参数是经过该装饰器转换过后的参数(例如schema中包含Transform之类的功能),需要获取原始数据可以使用@Ctx装饰器获取koa的Context。

export class Login {
/**
* username describe
*/
@IsString()
username: string;

/**
* password describe
*/
@IsString()
password: string;
}

@Controller('/hello');
class Test{
@Autowired()
UserService:UserService

@GET('/test)
@Validate({schema:Login,error:(errors)=>{
throw new Error(`${errors.map(error=>Object.value(error.constraints))}`);
}})
async test(@Query query){
return query;
}
}

工具

logger

打印信息,分为 error,info,和 succuess,带时间戳和不同颜色

import {logger} from '@tosee/misc'

logger.info("hello world");
app.use(logger.Middleware()); //在后续中间件中的logger打印会带上唯一id,参考@tosee/log

扩展

@tosee/config加载配置文件使用@Value装饰器注入

@tosee/util@Before,@After,@Around,@Catch,@Autowired,@Schedule等工具装饰器

@tosee/busboybusboy的封装,直接处理formdata文件流无临时文件,提供装饰器,中间件与自定义方式

@tosee/log支持RequestID与自定义格式的日志库

Generated using TypeDoc