Nest.js 5 正式版,基于 TypeScript 面向切面编程 的 Nodejs 微服务框架

发布于 1周前 作者 caililin 来自 nodejs/Nestjs

Nest.js 5 正式版,基于 TypeScript 面向切面编程 的 Nodejs 微服务框架

Nest.js 5 正式版发布了,主要改进内容包括:

特点

  • core:支持异步生命周期钩子( OnModuleInit 和 OnModuleDestroy )# 569

  • 核心:HTTP 服务器独立性,fastify 整合( FastifyAdapter )

  • 核心:允许绑定来自任何模块的全局拦截器,过滤器,管道和看守器。例:

{ 提供:APP_INTERCEPTOR,useClass:LoggerInterceptor, }

  • 核心:[@UseGuards](/user/UseGuards)(),[@UsePipes](/user/UsePipes)(),[@UseFilters](/user/UseFilters)(),和 [@UseInterceptors](/user/UseInterceptors)() 延伸,而不是重写现有的元数据

  • 核心:无处不在的注入(管道,过滤器,拦截器和看守器)

  • 核心:传递 ArgumentsHost 给异常过滤器器(访问每个参数的能力)

  • 核心:通过增强 ExecutionContext 到拦截器和看守器(访问每个参数和执行上下文的能力)

  • 微服务:重写现有的传输器( TCP,Redis ),提供新的策略:Nats,MQTT,gRPC

  • 全部:提高执行上下文性能( http,ws,microservices )

Bug 修复

  • 普通:移除 multer 依赖# 532

  • 核心:悬挂 NestApplicationContext 过程# 503

  • 微服务:并发问题(包括 TCP 和 Redis 传输器)# 505

改进

  • 全部:删除 reflect-metadata 依赖关系# 563

  • 全部:将 RxJS 升级到 6.0.0

  • all:升级 Node.js> = 8.9.0 ( TypeScript 目标 es2017 )

  • 核心:更多描述性例外(循环依赖)# 493

  • 核心:与 useContainer()( class-validator 和 typeorm 封装)# 528 兼容的嵌套容器

  • 核心:移除静态依赖( webpack 兼容性)

  • websockets:[@WebSocketGateway](/user/WebSocketGateway)()接受传递给 socket.io 实例# 508 的选项参数

弃用

  • 通用:弃用 [@Component](/user/Component)(),[@Middleware](/user/Middleware)(),[@Interceptor](/user/Interceptor)(),[@Pipe](/user/Pipe)(),和 [@Guard](/user/Guard)()装饰器(使用 [@Injectable](/user/Injectable)()替代)

  • 常见:删除 ExpressMiddleware (使用 MiddlewareFunction )

  • 核心:弃用 modules: [](使用 imports: [] )

  • 核心:弃用 components: [](使用 providers: [])

  • 核心:删除 MiddlewaresConsumer (使用 MiddlewareConsumer )

笔记

从传统的 express 中间件模式转向每个中间件都被限制在一个特定的路由上,而不管请求方式如何

值得一提的是,这个版本支持将底层的 express 替换为 fastify (最快的 node.js 框架)

5.0 中文文档: https://docs.nestjs.cn/5.0/firststeps


6 回复

关注很久了,很适合 ng 开发者上手


??? notadd

最后一点,替换底层了?我印象中不是可选吗?

不错, 确实很有 ng 的味道, 已 star

一个意思,支持替换

Nest.js 5正式版确实是一个基于TypeScript、面向切面编程的Node.js微服务框架。以下是对Nest.js 5的简要介绍及一些关键特性的代码示例:

关键特性

  1. 支持异步生命周期钩子
@Module({
  providers: [SomeService],
})
export class SomeModule implements OnModuleInit, OnModuleDestroy {
  constructor(private readonly someService: SomeService) {}

  onModuleInit() {
    // Initialization logic
  }

  onModuleDestroy() {
    // Cleanup logic
  }
}
  1. HTTP服务器独立性及Fastify整合

使用Fastify作为HTTP服务器:

import { FastifyAdapter, NestFastifyApplication } from '@nestjs/platform-fastify';
import { NestFactory } from '@nestjs/core';

async function bootstrap() {
  const app = await NestFactory.create<NestFastifyApplication>(AppModule, new FastifyAdapter());
  await app.listen(3000);
}
bootstrap();
  1. 面向切面编程(AOP):通过中间件、拦截器、守卫和异常过滤器实现。

拦截器示例

@Injectable()
export class LoggingInterceptor implements NestInterceptor {
  intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
    console.log('Before...');

    const now = Date.now();
    return next
      .handle()
      .pipe(
        tap(() => console.log(`After... ${Date.now() - now}ms`)),
      );
  }
}

总结

Nest.js 5正式版通过其丰富的特性和工具支持,为开发者提供了一个强大而灵活的框架,适用于构建高效、可扩展的服务器端应用程序,特别是微服务架构。

回到顶部