# 遷移指南
本文提供了一套從 Nest 7 遷移到 Nest 8 的指南。要了解更多關于 Nest 8 中添加的新功能,請查看此[鏈接](https://github.com/nestjs/nest/pull/6349)。
## HTTP 模塊
從`@nestjs/common`包導出的`HttpModule`已被廢棄,將在下一個主要版本中刪除。請使用`@nestjs/axios`包(兩者API沒有任何差別)。
## gRPC 策略
原先的Node gRPC庫(`grpc`)已被廢棄,將不再接受功能更新。在 Nest 8 中,你應該使用`@grpc/grpc-js`庫來代替。
## NATS 策略
NATS已經發布了一個新的主要版本(2.0),它有許多變化,并且和 `nats@1.x.x` API不兼容。如果你使用一個用其他框架編寫的服務與Nest微服務(使用NATS作為傳輸層)交互,請看<a style="color:red;" href="https://github.com/nats-io/nats.js/blob/master/migration.md">遷移文檔</a>了解 v2 中的變化。否則,在Nest微服務之間進行通信時,你不會看到任何重大差異。
如果要升級,請確保安裝了最新版本的`nats`包(`npm i nats@latest`)。同時,更新你的<a style="color:red;" href="https://github.com/nats-io/nats.js/blob/master/migration.md#changed-configuration-properties">NATS配置</a>。例如:
```typescript
// 之前
const app = await NestFactory.createMicroservice<MicroserviceOptions>(AppModule, {
transport: Transport.NATS,
options: {
url: 'nats://localhost:4222',
},
});
// 現在
const app = await NestFactory.createMicroservice<MicroserviceOptions>(AppModule, {
transport: Transport.NATS,
options: {
servers: ['nats://localhost:4222'],
},
});
```
## `@All()` 裝飾器
用 `@All()` 裝飾器注釋的路由將會映射到 `router.all()` 方法,而不是 `router.use()`。
## 異步的監聽/啟動方法
`listenAsync()` 和 `startAllMicroservicesAsync()` 方法已被棄用。取而代之的是簡單地使用 `listen()` 和 `startAllMicroservices()`方法(它們都是異步的)。
## `Socket.io`
`@nestjs/platform-socket.io` 包已升級為使用 `socket.io@4.x.x`版本(Nest v7是基于 `socket.io` v2的)。要了解更多信息,請查看這些文章:<a style="color:red;" href="https://socket.io/blog/socket-io-3-release/">Socket.io 3 Release</a> 和 <a style="color:red;" href="https://socket.io/blog/socket-io-3-release/">Socket.io 4 Release</a>。
## Logger 的突破性變化
為了更好的擴展性,我們把 `Logger` 和 `ConsoleLogger` 類分開(<a style="color:red;" href="https://github.com/nestjs/nest/pull/6221">PR</a> ,在 <a style="color:red;" href="https://docs.nestjs.com/techniques/logger">Logging</a> 章節中了解更多)。如果你的應用程序使用了一個擴展了內置 `Logger` 的自定義日志器類,你應該更新它為擴展 `ConsoleLogger` 。
之前:
```typescript
export class MyLogger extends Logger {}
```
現在:
```typescript
export class MyLogger extends ConsoleLogger {}
```
## `@nestjs/config` 軟件包
在`registerAs`函數(類型)中,有一個小的突破性變化(breaking change),你可以在這個 <a style="color:red;" href="https://github.com/nestjs/config/pull/173">PR</a> 中看到具體有什么變化。
## `@nestjs/graphql` 軟件包
你自動生成的模式文件看起來可能會有一些小的差別(類型順序發生變化)。另外,如果你使用模式優先的方法,自動生成的類型定義將發生變化,因為在最新版本中引入了一個新的 `Nullable<T>` 類型。
除此之外,從你的解析器拋出的所有 `HttpException` 錯誤將自動映射到相應的 `ApolloError` 實例,除非你將 `autoTransformHttpErrors` 配置屬性(在你傳入 `GraphQLModule#forRoot()` 方法的選項對象中)設置為 `false` 。
## RxJS#
請確保升級到 `rxjs` 包的最新版本(v7)。
- 介紹
- 概述
- 第一步
- 控制器
- 提供者
- 模塊
- 中間件
- 異常過濾器
- 管道
- 守衛
- 攔截器
- 自定義裝飾器
- 基礎知識
- 自定義提供者
- 異步提供者
- 動態模塊
- 注入作用域
- 循環依賴
- 模塊參考
- 懶加載模塊
- 應用上下文
- 生命周期事件
- 跨平臺
- 測試
- 技術
- 數據庫
- Mongo
- 配置
- 驗證
- 緩存
- 序列化
- 版本控制
- 定時任務
- 隊列
- 日志
- Cookies
- 事件
- 壓縮
- 文件上傳
- 流式處理文件
- HTTP模塊
- Session(會話)
- MVC
- 性能(Fastify)
- 服務器端事件發送
- 安全
- 認證(Authentication)
- 授權(Authorization)
- 加密和散列
- Helmet
- CORS(跨域請求)
- CSRF保護
- 限速
- GraphQL
- 快速開始
- 解析器(resolvers)
- 變更(Mutations)
- 訂閱(Subscriptions)
- 標量(Scalars)
- 指令(directives)
- 接口(Interfaces)
- 聯合類型
- 枚舉(Enums)
- 字段中間件
- 映射類型
- 插件
- 復雜性
- 擴展
- CLI插件
- 生成SDL
- 其他功能
- 聯合服務
- 遷移指南
- Websocket
- 網關
- 異常過濾器
- 管道
- 守衛
- 攔截器
- 適配器
- 微服務
- 概述
- Redis
- MQTT
- NATS
- RabbitMQ
- Kafka
- gRPC
- 自定義傳輸器
- 異常過濾器
- 管道
- 守衛
- 攔截器
- 獨立應用
- Cli
- 概述
- 工作空間
- 庫
- 用法
- 腳本
- Openapi
- 介紹
- 類型和參數
- 操作
- 安全
- 映射類型
- 裝飾器
- CLI插件
- 其他特性
- 遷移指南
- 秘籍
- CRUD 生成器
- 熱重載
- MikroORM
- TypeORM
- Mongoose
- 序列化
- 路由模塊
- Swagger
- 健康檢查
- CQRS
- 文檔
- Prisma
- 靜態服務
- Nest Commander
- 問答
- Serverless
- HTTP 適配器
- 全局路由前綴
- 混合應用
- HTTPS 和多服務器
- 請求生命周期
- 常見錯誤
- 實例
- 遷移指南
- 發現
- 誰在使用Nest?