- Controller decorators from routing-controllers
- Dependency injection container from inversify
- Logging based on log4js
- Database support based on typeorm
- Modules support
- Unified AJAX error responses
Performance tests for routing-controllers, typeorm, log4js.
Bootstrap:
import{Container}from'inversify';import{Connection,getRepository,Repository}from'typeorm';import{Module,WebApplication,ClusteredWebApplication,Environment,middlewares,}from'@melmedia/node-ts-framework';import{Type}from'./Type';exportclassAppModuleextendsModule{publicasyncinitDiContainer(container: Container){container.bind<Connection>(Type.DbConnection).toConstantValue(await(newcomponents.DbConnectionFactory).create([this]));}protectedgetbaseDirectory(){return__dirname;}}constmodules=[newAppModule];constapp=Environment.Development===process.env.PROJECT_ENV ?
newWebApplication(modules,[middlewares.ErrorHandlingMiddleware]) :
newClusteredWebApplication(modules,[middlewares.ErrorHandlingMiddleware]);app.run();Controller looks like:
@JsonController('/client')exportclassClientController{
@di.inject(Type.ClientDataRepository)protectedclientDataRepository!: Repository<Client>;
@Post('/')
@HttpCode(201)publicasynccreate(
@BodyParam('client',{required: true})clientForm: CreateClientForm,
@Res()response: Response,){}}