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

Sign up
Appearance settings

bwcxjs/bwcx

Repository files navigation

bwcx

轻量、渐进式、面向对象的 Node.js Web 框架。

参阅文档 以快速上手和查阅 API。

也可以直接使用下列功能强大的模板来创建项目:

基本安装

npm i -S bwcx-common bwcx-core bwcx-ljsm

特性概览

轻量的 OOP Web 开发

@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);
 }
}

谁在使用

logo-wechat

About

轻量、渐进式、面向对象的 Node.js Web 框架

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 3

AltStyle によって変換されたページ (->オリジナル) /