轻量、渐进式、面向对象的 Node.js Web 框架。
参阅文档 以快速上手和查阅 API。
也可以直接使用下列功能强大的模板来创建项目:
- bwcx-vue3-ssr-template:使用了 bwcx 一体化开发能力,基于 Vue 3 的全栈模板
npm i -S bwcx-common bwcx-core bwcx-ljsm
@Controller() class HomeController { @Get('/') hello() { return { hello: 'bwcx' }; } } class OurApp extends App { protected port = 3000; afterStart() { console.log(`🚀 A bwcx app is listening on http://localhost:${this.port}`); } } const app = new OurApp(); app.bootstrap().then(() => { app.start(); });
@Provide() export default class MyService { @Inject() private formatUtil: FormatUtil; // 或使用构造器注入 constructor(private formatUtil: FormatUtil) {} public getStr() { return this.formatUtil.formatString('foo'); } }
@Middleware() export default class LogMiddleware implements IBwcxMiddleware { use(ctx: RequestContext, next: MiddlewareNext) { console.log(`req: ${ctx.url}`); return next(); } } @Controller() @UseMiddlewares(LogMiddleware) // 作用于全部路由 export default class HomeController { @Get('/') @UseMiddlewares(LogMiddleware) // 作用于单个路由 hello() { return 'world'; } }
@Guard() export default class RandomGuard implements IBwcxGuard { canPass(ctx: RequestContext) { return Math.random() < 0.5; } } @Controller() @UseGuards(RandomGuard) // 作用于全部路由 export default class HomeController { @Get('/') @UseGuards(RandomGuard) // 作用于单个路由 hello() { return 'world'; } }
@ExceptionHandler(Exception) export default class GlobalExceptionHandler implements IBwcxExceptionHandler { catch(error: Exception, ctx: RequestContext) { ctx.status = 500; ctx.body = { msg: 'Internal Server Error', }; } }
export class UserDTO { @IsInt() userId: number; @Length(2, 20) username: string; } export class GetUsersReqDTO { @FromQuery() @IsInt() @Min(1) page: number; } export class GetUsersRespDTO { @Type(() => UserDTO) @ValidateNested() rows: UserDTO[]; } @Controller('/user') export default class UserController { @Get('/get') @Contract(GetUsersReqDTO, GetUsersRespDTO) getUsers(@Data() data: GetUsersReqDTO): Promise<GetUsersRespDTO> { return userService.getUsers(data); } }