学习nest.js笔记
nest简介
Nest (NestJS) 是一个用于构建高效、可扩展的 Node.js 服务器端应用程序的开发框架。它利用 JavaScript 的渐进增强的能力,使用并完全支持 TypeScript (仍然允许开发者使用纯 JavaScript 进行开发),并结合了 OOP (面向对象编程)、FP (函数式编程)和 FRP (函数响应式编程)。
在底层,Nest 构建在强大的 HTTP 服务器框架上,例如 Express (默认),并且还可以通过配置从而使用 Fastify !
Nest 在这些常见的 Node.js 框架 (Express/Fastify) 之上提高了一个抽象级别,但仍然向开发者直接暴露了底层框架的 API。这使得开发者可以自由地使用适用于底层平台的无数的第三方模块。
学习方式
视频学习
常用功能实践
### 模块化开发的小心机
- **按业务垂直拆分**:比如用户模块`UserModule`、订单模块`OrderModule`
- **共享模块**:
// shared.module.ts
@Module({
providers: [{
provide: 'ENHANCED_LOGGER',
useClass: EnhancedLogger
}],
exports: ['ENHANCED_LOGGER']
})
export class SharedModule {}
拦截器实战案例
做个接口计时器:
@Injectable()
export class TimingInterceptor implements NestInterceptor {
async intercept(context: ExecutionContext, next: CallHandler) {
const start = Date.now();
const response = await next.handle().toPromise();
console.log(`接口耗时:${Date.now() - start}ms`);
return response;
}
}
可以配合监控系统统计接口性能
性能优化三板斧
1. 选对适配器
-
速度对比:Fastify 的基准测试显示请求处理速度比 Express 快约 20%-30%
-
内核优势:
- 更高效的路由匹配算法(使用radix tree数据结构)
- 内置 JSON 序列化优化(比JSON.stringify快2倍)
- 默认支持请求负载schema验证
// main.ts
async function bootstrap() {
const app = await NestFactory.create(
AppModule,
new FastifyAdapter() // 性能提升肉眼可见
);
}
2. 缓存这样用才高效
请求流程:
客户端 -> 路由 -> CacheInterceptor 检查缓存 ->
有缓存? 直接返回 : 执行控制器 -> 缓存结果 -> 返回响应
@Controller('products')
@CacheInterceptor() // 控制器级别缓存
export class ProductsController {
@Get(':id')
@CacheTTL(30) // 单独设置过期时间
async getDetail(@Param('id') id: string) {
// ...
}
}
3. 数据库优化技巧
分页查询的正确姿势:
async getUsers(page: number, size: number) {
return this.userRepository.find({
skip: (page - 1) * size,
take: size,
order: { createdAt: 'DESC' }, // 避免全表扫描
cache: 60000 // 自动缓存1分钟
});
}
to be continue...