nest.js小知识点

112 阅读2分钟

学习nest.js笔记

nest简介

Nest (NestJS) 是一个用于构建高效、可扩展的 Node.js 服务器端应用程序的开发框架。它利用 JavaScript 的渐进增强的能力,使用并完全支持 TypeScript (仍然允许开发者使用纯 JavaScript 进行开发),并结合了 OOP (面向对象编程)、FP (函数式编程)和 FRP (函数响应式编程)。

在底层,Nest 构建在强大的 HTTP 服务器框架上,例如 Express (默认),并且还可以通过配置从而使用 Fastify !

Nest 在这些常见的 Node.js 框架 (Express/Fastify) 之上提高了一个抽象级别,但仍然向开发者直接暴露了底层框架的 API。这使得开发者可以自由地使用适用于底层平台的无数的第三方模块。

学习方式

冴羽小册 juejin.cn/book/730785…

视频学习

常用功能实践

### 模块化开发的小心机
- **按业务垂直拆分**:比如用户模块`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...