轻量、渐进
也可以
- 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);
}
}