两个月大致完成类nestjs的框架设计和开发

223 阅读2分钟

最近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
    })
  }
}
​

test1.png

启动配置

create

用于对根module进行解析,得到收集的依赖项,创建启动服务

useActionHandler

注入AbstractHandler的实现类(目前内置的有全局异常处理抽象类、全局参数非法的抽象类),目前仅支持此两种内置的抽象类的实现。

useModuleResolver

注入module的解析器,用于处理解析模块内部的依赖项(中间件、子模块、控制器等),该方法默认不被调用,内置BaseModuleResolver

useControllerResolver

注入controller的解析器,用于处理解析控制器内部的依赖项(路由方法、中间件等),该方法默认不被调用,内置BaseControllerResolver

useServiceProviderFactory

注入依赖注入的工厂,用于处理得到依赖注入容器建造者,通过容器建造者得到容器,实现实例化类及其依赖服务的类

useParameterResolver

注入方法参数解析器,用于处理解析参数的来源,内置ParameterResolver有ModelQueryQueryHeaderBodyParam

listen

监听端口,接受请求。同nodejs的http.server.listen

源码地址:

github.com/ainuo5213/a…

例子sample:

github.com/ainuo5213/a…

欢迎大家提出不同的见解,如果代码有优化的话可以提issue,我将持续跟进。多谢了,求star!!!