🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 性能(Fastify) 在底层,`Nest` 使用了[Express](https://expressjs.com/)框架,但如前所述,它提供了与各种其他库的兼容性,例如 [Fastify](https://github.com/fastify/fastify)。`Nest`应用一个框架适配器,其主要功能是代理中间件和处理器到适当的特定库应用中,从而达到框架的独立性。 > 注意要应用框架适配器,目标库必须提供在`Express` 类似的请求/响应管道处理 `Fastify` 非常适合这里,因为它以与 `express` 类似的方式解决设计问题。然而,`fastify` 的速度要快得多,达到了几乎两倍的基准测试结果。问题是,为什么 `Nest` 仍然使用 `express` 作为默认的 HTTP 提供程序?因为 `express` 是应用广泛、广为人知的,而且拥有一套庞大的兼容中间件。 但是由于 `Nest` 提供了框架独立性,因此您可以轻松地在它们之间迁移。当您对快速的性能给予很高的评价时,`Fastify` 可能是更好的选择。要使用 `Fastify`,只需选择 `FastifyAdapter`本章所示的内置功能。 ### 安装 首先,我们需要安装所需的软件包: ```bash $ npm i --save @nestjs/platform-fastify ``` ### 适配器(Adapter) 安装 fastify 后,我们可以使用 `FastifyAdapter`。 >main.ts ```typescript import { NestFactory } from '@nestjs/core'; import { FastifyAdapter, NestFastifyApplication } from '@nestjs/platform-fastify'; import { ApplicationModule } from './app.module'; async function bootstrap() { const app = await NestFactory.create<NestFastifyApplication>(ApplicationModule, new FastifyAdapter()); await app.listen(3000); } bootstrap(); ``` 默认情况下,`Fastify`仅在 `localhost 127.0.0.1` 接口上监听(了解[更多](https://www.fastify.io/docs/latest/Getting-Started/#your-first-server)信息)。如果要接受其他主机上的连接,则应`'0.0.0.0'`在 `listen()` 呼叫中指定: ```typescript async function bootstrap() { const app = await NestFactory.create<NestFastifyApplication>(ApplicationModule, new FastifyAdapter()); await app.listen(3000, '0.0.0.0'); } ``` ### 平台特定的软件包 请记住,当您使用 `FastifyAdapter` 时,`Nest` 使用 `Fastify` 作为 `HTTP` 提供程序。 这意味着依赖 `Express` 的每个配方都可能不再起作用。 您应该改为使用 `Fastify` 等效程序包。 ### 重定向响应 `Fastify` 处理重定向响应的方式与 `Express` 有所不同。要使用 `Fastify` 进行正确的重定向,请同时返回状态代码和 `URL`,如下所示: ```typescript @Get() index(@Res() res) { res.status(302).redirect('/login'); } ``` ### Fastify 选项 您可以通过构造函数将选项传递给 `Fastify`的构造 `FastifyAdapter` 函数。例如: ```typescript new FastifyAdapter({ logger: true }); ``` ### 例子 [这里](https://github.com/nestjs/nest/tree/master/sample/10-fastify)有一个工作示例