前言
Fastify 是一款高效且低开销的 Node.js Web 应用框架,而 Nest.js 是基于 TypeScript 开发的渐进式 Web 应用框架。使用 Nest.js 可以方便地实现模块化开发和自动化测试。在本文中,我们将探讨在 Fastify 中使用 Nest.js 进行模块化开发。
安装
首先,我们需要创建一个 Fastify 项目并安装 Nest.js。可以使用以下命令:
npm init -y npm install fastify @nestjs/common
配置
创建一个 routes
目录,然后在其中添加一个 index.ts
文件。在该文件中,我们将创建一个路由模块并将其导入到 Fastify中。
// javascriptcn.com code example import { FastifyInstance } from 'fastify'; import { Module } from '@nestjs/common'; import { AppController } from './app.controller'; @Module({ controllers: [AppController], }) export class AppModule {} export async function startServer() { const fastify = Fastify({ logger: true }); // 导入 route 模块 fastify.register(AppModule); const port = process.env.PORT || 3000; try { // 启动服务器 await fastify.listen(port, '0.0.0.0'); console.log(`Server started on port ${port}`); } catch (err) { console.log('Error starting server:', err); } }
在上述代码中,我们创建了一个 AppModule
模块,并将其控制器添加到 Fastify 实例的 register
中。然后,我们启动了 Fastify 服务器并让其监听 3000 端口。
Controller
现在,我们在 routes
目录中添加一个名为 app.controller.ts
的文件。在该文件中,我们将创建一个有关“Hello World”应用程序的控制器。
// javascriptcn.com code example import { Controller, Get } from '@nestjs/common'; @Controller('/v1') export class AppController { @Get('/hello') async helloWorld(): Promise<string> { return 'Hello World'; } }
该控制器类包含一个基于 HTTP GET 方法的路由,该路由响应 /v1/hello
URL,并返回一个字符串“Hello World”。
Test
最后,在项目中创建一个名为 test
的目录,并在其中添加一个名为 app.test.ts
的测试文件。在测试文件中,我们将使用 Fastify 的 inject
方法来检查“Hello World”路由是否正常工作。
// javascriptcn.com code example import { startServer } from '../routes'; import { FastifyInstance } from 'fastify'; import axios from 'axios'; let app: FastifyInstance; beforeAll(async () => { app = await startServer(); }); afterAll(async () => { await app.close(); }) test('GET /v1/hello', async () => { const response = await axios.get('http://localhost:3000/v1/hello'); expect(response.status).toEqual(200); expect(response.data).toEqual('Hello World'); });
在上述代码中,我们首先通过 startServer
函数启动 Fastify 服务器并将其分配给 app
变量。接下来,我们创建了一个名为“GET /v1/hello”的测试用例来发送 HTTP GET 请求。最后,我们使用 expect
断言来测试响应的状态和数据。
结论
在本文中,我们学习了如何使用 Nest.js 进行模块化开发并将其集成到 Fastify 中。通过创建控制器和编写自动化测试,我们可以构建出一个功能齐全且易于扩展的 Web 应用程序。此外,我们还了解了如何使用 Fastify 的 inject
方法来测试 HTTP API。
上述示例代码可以在 GitHub 上跟随阅读:https://github.com/shuow/fastify-nestjs-example
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6737f759317fbffedf0d6ce5