Nest.js 5 正式版,基于 TypeScript 面向切面编程 的 Nodejs 微服务框架
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
关注很久了,很适合 ng 开发者上手
??? notadd
最后一点,替换底层了?我印象中不是可选吗?
不错, 确实很有 ng 的味道, 已 star
一个意思,支持替换
Nest.js 5正式版确实是一个基于TypeScript、面向切面编程的Node.js微服务框架。以下是对Nest.js 5的简要介绍及一些关键特性的代码示例:
关键特性
- 支持异步生命周期钩子:
@Module({
providers: [SomeService],
})
export class SomeModule implements OnModuleInit, OnModuleDestroy {
constructor(private readonly someService: SomeService) {}
onModuleInit() {
// Initialization logic
}
onModuleDestroy() {
// Cleanup logic
}
}
- 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();
- 面向切面编程(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正式版通过其丰富的特性和工具支持,为开发者提供了一个强大而灵活的框架,适用于构建高效、可扩展的服务器端应用程序,特别是微服务架构。