(Translated by https://www.hiragana.jp/)
GitHub - bwcxjs/bwcx: 轻量、渐进式、面向对象的 Node.js Web 框架
Skip to content
/ bwcx Public

轻量、渐进しきめんこう对象てき Node.js Web かまち

License

Notifications You must be signed in to change notification settings

bwcxjs/bwcx

Repository files navigation

bwcx

轻量、渐进しきめんこう对象てき Node.js Web かまち

まいり阅文档 以快そく上手じょうず查阅 API。

也可以直接ちょくせつ使用しようれつこうのう强大きょうだいてきばんらい创建项目:

  • bwcx-vue3-ssr-template使用しようりょう bwcx 一体化いったいか开发能力のうりょく于 Vue 3 てきぜん栈模ばん

基本きほんあんそう

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