迁移指南

迁移指南

本文提供了一套指导方针,从4迁移到最新的5.0版本。在开发过程中,我们花了很多时间来避免任何重大变化。然而,API必须在许多地方进行更改以简化其使用。此外,由于早期阶段做出的决定,之前的版本受到限制。现在,我们不那么自以为是,甚至比以前更加强大。

模块

为了减少Nest和Angular之间的差异数量,关于@Module()装饰器的改变很少。

modules属性现已弃用。请imports改用

  • components属性现已弃用。请providers改用

装饰

@Component()@Middleware()@Interceptor()@Pipe(),和@Guard()现在已被弃用。请@Injectable()改用。

中间件接口

MiddlewaresConsumer课程已更改为MiddlewareConsumer。此外,ExpressMiddleware不再存在,请改用MiddlewareFunction界面。

过滤器

异常过滤器不再作为单一范例锁定。以前,异常过滤器可以访问该response对象。与传入版本一起,catch()方法取代ArgumentsHost实例。这个对象在这里有很好的描述。多亏了这一点,您可以访问每个参数,包括response对象。

JS

// Before @Catch(HttpException) export class HttpExceptionFilter implements ExceptionFilter { catch(exception: HttpException, response) {} } // After @Catch(HttpException) export class HttpExceptionFilter implements ExceptionFilter { catch(exception: HttpException, host: ArgumentsHost) { const response = host.switchToHttp().getResponse( // ... } }

逆天

与过滤器一样,防护装置现在更加灵活。访问增强版ExecutionContext(阅读更多内容)为警卫提供了更多的超级大国,所有这些都建立在简化的API之上。

JS

// Before @Guard() export class RolesGuard implements CanActivate { canActivate( dataOrRequest, context: ExecutionContext, ): boolean | Promise<boolean> | Observable<boolean> { return true; } } // After @Injectable() export class RolesGuard implements CanActivate { canActivate( context: ExecutionContext, ): boolean | Promise<boolean> | Observable<boolean> { // const request = context.switchToHttp().getRequest( // const data = context.switchToWs().getData( return true; } }

拦截器

拦截器API的演变方式与等效的防护API 完全相同。

JS

// Before @Interceptor() export class TransformInterceptor implements NestInterceptor { intercept( dataOrRequest, context: ExecutionContext, stream$: Observable<any>, ): Observable<any> { return stream$.map((data) => { data }) } } // After @Injectable() export class TransformInterceptor implements NestInterceptor { intercept( context: ExecutionContext, call$: Observable<T>, ): Observable<Response<T>> { // const request = context.switchToHttp().getRequest( // const data = context.switchToWs().getData( return call$.pipe(map(data => { data })) } }

自定义装饰器

createRouteParamDecorator()函数已弃用。立即使用createParamDecorator()

Node.js的

我们遵循最近8.x作为活动LTS版本移动的Node.js发布计划。因此,Nest 5现在支持> = 8.9.0作为最低版本。由于es2017TypeScript编译的目标,这一转变为我们带来了可持续的性能提升。

外部图书馆

Nest 5不支持rxjs <6.0.0。请记住升级此软件包。