Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

fullstackoverflow/Misc

Open more actions menu

Repository files navigation

Open in Visual Studio Code Build Status codecov NPM version

Misc

基于Koa与Typescript构建的框架

快速开始

  1. 安装命令行工具
npm i @tosee/misc-cli -g
  1. 初始化项目并运行
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与自定义格式的日志库

About

基于Koa与Typescript构建的框架

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Morty Proxy This is a proxified and sanitized view of the page, visit original site.