最近2个月除了工作,生活,一直忙于个人项目,ainuo5213-decorators
简介
该项目按照ASP.NET core
的方式进行设计实现,含有包括路由、参数验证的装饰器、中间件、依赖注入、全局错误处理、Controller原生方法、全局身份认证等。
实现原理基于Reflect Metadata
(反射元数据)。灵感来自于TypeScript 全面进阶指南
通过简单的路由、参数装饰器配置,即可完成接口的构建
并且支持使用者自己进行部分功能定制(参数验证、参数解析、中间件、身份认证、等)
使用代码和截图
import { BaseController } from '@ainuo5213/core'
import { InjectClassMiddleware } from '@ainuo5213/core'
import { Controller } from '@ainuo5213/core'
import { ControllerCorsMiddleware } from './CorsMiddleware'
import { ToyService } from './toy.service'
import { UserDTO } from './UserDTO'
import { Post } from '../packages/route/post'
import { Body, Query } from '@ainuo5213/parameter'
import { MethodAnonymous, MethodAuthorize } from '@ainuo5213/core/authorize'
import { get } from 'http'
import { Get } from '@ainuo5213/route'
@InjectClassMiddleware(ControllerCorsMiddleware)
@Controller('/toy')
export class ToyController extends BaseController {
constructor(private toyService: ToyService) {
super()
}
@Get('/list')
@MethodAuthorize()
async userList(@Query('id') id: string) {
const result = this.toyService.getObj()
// const result = await promises.readFile(path.join(__dirname, './test.jpg'))
return this.success({
result,
id
})
}
}
启动配置
create
用于对根module进行解析,得到收集的依赖项,创建启动服务
useActionHandler
注入AbstractHandler
的实现类(目前内置的有全局异常处理抽象类、全局参数非法的抽象类),目前仅支持此两种内置的抽象类的实现。
useModuleResolver
注入module的解析器,用于处理解析模块内部的依赖项(中间件、子模块、控制器等),该方法默认不被调用,内置BaseModuleResolver
useControllerResolver
注入controller的解析器,用于处理解析控制器内部的依赖项(路由方法、中间件等),该方法默认不被调用,内置BaseControllerResolver
useServiceProviderFactory
注入依赖注入的工厂,用于处理得到依赖注入容器建造者,通过容器建造者得到容器,实现实例化类及其依赖服务的类
useParameterResolver
注入方法参数解析器,用于处理解析参数的来源,内置ParameterResolver有ModelQuery
、Query
、Header
、Body
、Param
listen
监听端口,接受请求。同nodejs的http.server.listen
源码地址:
例子sample:
欢迎大家提出不同的见解,如果代码有优化的话可以提issue,我将持续跟进。多谢了,求star!!!