$ loading_
提供 NestJS 架构模式与最佳实践,帮助构建可维护的生产级 TypeScript 后端。
复制安装指令,让 AI 自动完成配置 · 推荐新手
请帮我安装 askskill 上的 "nestjs-patterns" 技能: 1. 下载 https://raw.githubusercontent.com/affaan-m/ECC/main/skills/nestjs-patterns/SKILL.md 2. 保存为 ~/.claude/skills/nestjs-patterns/SKILL.md 3. 装好后重载技能,告诉我可以用了
请基于 NestJS 最佳实践,为一个电商系统设计后端架构,包含模块划分、控制器、服务、DTO、守卫、拦截器和配置管理,并说明目录结构。
一套清晰的 NestJS 分层架构方案,含模块职责、目录结构与关键实现建议。
为用户注册与登录功能编写 NestJS 示例,要求包含控制器、服务、DTO 校验、统一返回格式和异常处理。
可参考的接口代码模板,覆盖请求校验、业务逻辑组织与统一错误处理。
请检查一个 NestJS 项目在生产环境中的关键实践,重点说明配置管理、鉴权守卫、日志拦截器、环境变量、安全建议与可测试性。
一份生产级改进清单,帮助项目提升可维护性、安全性与部署稳定性。
Production-grade NestJS patterns for modular TypeScript backends.
src/
├── app.module.ts
├── main.ts
├── common/
│ ├── filters/
│ ├── guards/
│ ├── interceptors/
│ └── pipes/
├── config/
│ ├── configuration.ts
│ └── validation.ts
├── modules/
│ ├── auth/
│ │ ├── auth.controller.ts
│ │ ├── auth.module.ts
│ │ ├── auth.service.ts
│ │ ├── dto/
│ │ ├── guards/
│ │ └── strategies/
│ └── users/
│ ├── dto/
│ ├── entities/
│ ├── users.controller.ts
│ ├── users.module.ts
│ └── users.service.ts
└── prisma/ or database/
common/.async function bootstrap() {
const app = await NestFactory.create(AppModule, { bufferLogs: true });
app.useGlobalPipes(
new ValidationPipe({
whitelist: true,
forbidNonWhitelisted: true,
transform: true,
transformOptions: { enableImplicitConversion: true },
}),
);
app.useGlobalInterceptors(new ClassSerializerInterceptor(app.get(Reflector)));
app.useGlobalFilters(new HttpExceptionFilter());
await app.listen(process.env.PORT ?? 3000);
}
bootstrap();
whitelist and forbidNonWhitelisted on public APIs.@Module({
controllers: [UsersController],
providers: [UsersService],
exports: [UsersService],
})
export class UsersModule {}
@Controller('users')
export class UsersController {
constructor(private readonly usersService: UsersService) {}
@Get(':id')
getById(@Param('id', ParseUUIDPipe) id: string) {
return this.usersService.getById(id);
}
@Post()
create(@Body() dto: CreateUserDto) {
return this.usersService.create(dto);
}
}
@Injectable()
export class UsersService {
constructor(private readonly usersRepo: UsersRepository) {}
async create(dto: CreateUserDto) {
return this.usersRepo.create(dto);
}
}
export class CreateUserDto {
@IsEmail()
email!: string;
@IsString()
@Length(2, 80)
name!: string;
@IsOptional()
@IsEnum(UserRole)
role?: UserRole;
}
class-validator.@UseGuards(JwtAuthGuard, RolesGuard)
@Roles('admin')
@Get('admin/report')
getAdminReport(@Req() req: AuthenticatedRequest) {
return this.reportService.getForUser(req.user.id);
}
@Catch()
export class HttpExceptionFilter implements ExceptionFilter {
catch(exception: unknown, host: ArgumentsHost) {
const response = host.switchToHttp().getResponse<Response>();
const request = host.switchToHttp().getRequest<Request>();
if (exception instanceof HttpException) {
…
通过双评审智能体对结果进行对抗式校验,提升输出发布前的可靠性
帮助开发者用 NestJS 快速构建并发布符合 MCP 协议的 AI 工具服务