基于Koa与Typescript构建的框架
npm i @tosee/misc-cli -g
mkdir project
misc new ./project
cd project
npm run dev
Misc继承自Koa,实例化Misc时可以传入不同的参数来配置Koa实例,Misc自带koa-bodyparser
,@koa/cors
依赖,可以通过不同的配置来实现不同的功能,具体的参数细节查看API。
中间件数组,Misc会使用koa-compose
组合数组中的中间件,这些中间处于koa-bodyparser
,@koa/cors
之后(如果有配置的话),routerpath目录中的各路由之前。
Misc会加载该配置目录及其子目录下的所有ts文件,并获取它们的默认导出(export default),如果是koa-router
实例(使用@Controller装饰器)则Misc会加载这些实例,默认路径src/router
。
koa-bodyparser
配置选项,参照koa-bodyparser。
可选 http 或 https,选择 https 时则必须配置 tls 选项。
https 配置,详见https 参数。
跨域配置,使用@koa/cors
,参照@koa/cors。
监听端口号。
@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;
}
}
打印信息,分为 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/busboy对busboy的封装,直接处理formdata文件流无临时文件,提供装饰器,中间件与自定义方式
@tosee/log支持RequestID与自定义格式的日志库
Generated using TypeDoc