默認情況下,Nest 使用 Express 框架。 如前所述,Nest 還提供與其他庫的兼容性,例如 Fastify。 Nest 通過實現(xiàn)一個框架適配器來實現(xiàn)這種框架獨立性,該適配器的主要功能是將中間件和處理程序代理到適當?shù)膸焯囟▽崿F(xiàn)。
請注意,為了實現(xiàn)框架適配器,目標庫必須提供與 Express 中類似的請求/響應管道處理。
Fastify 為 Nest 提供了一個很好的替代框架,因為它以與 Express 類似的方式解決設(shè)計問題。 然而,fastify 比 Express 快得多,取得了幾乎兩倍的基準測試結(jié)果。 一個公平的問題是為什么 Nest 使用 Express 作為默認的 HTTP 提供程序? 原因是 Express 被廣泛使用、廣為人知,并且擁有大量兼容的中間件,這些中間件可供 Nest 用戶開箱即用。
但是由于 Nest 提供了框架獨立性,我們可以輕松地在它們之間進行遷移。 當我們高度重視非??斓男阅軙r,F(xiàn)astify 可能是一個更好的選擇。 要使用 Fastify,只需選擇本章所示的內(nèi)置 FastifyAdapter。
首先,我們需要安裝所需的包:
$ npm i --save @nestjs/platform-fastify
一旦安裝了 Fastify 平臺,我們就可以使用 FastifyAdapter。
import { NestFactory } from '@nestjs/core';
import {
FastifyAdapter,
NestFastifyApplication,
} from '@nestjs/platform-fastify';
import { AppModule } from './app.module';
async function bootstrap() {
const app = await NestFactory.create<NestFastifyApplication>(
AppModule,
new FastifyAdapter()
);
await app.listen(3000);
}
bootstrap();
默認情況下,F(xiàn)astify 只監(jiān)聽 localhost 127.0.0.1 接口。 如果要接受其他主機上的連接,則應在 listen() 調(diào)用中指定“0.0.0.0”:
async function bootstrap() {
const app = await NestFactory.create<NestFastifyApplication>(
AppModule,
new FastifyAdapter(),
);
await app.listen(3000, '0.0.0.0');
}
請記住,當我們使用 FastifyAdapter 時,Nest 使用 Fastify 作為 HTTP 提供程序。 這意味著依賴 Express 的每個配方可能不再有效。 相反,你應該使用 Fastify 等效的包。
Fastify 處理重定向響應的方式與 Express 略有不同。 要使用 Fastify 進行正確的重定向,請返回狀態(tài)碼和 URL,如下所示:
@Get()
index(@Res() res) {
res.status(302).redirect('/login');
}
我們可以通過 FastifyAdapter 構(gòu)造函數(shù)將選項傳遞給 Fastify 構(gòu)造函數(shù)。 例如:
new FastifyAdapter({ logger: true });
更多建議: