NestJS 学习笔记一
1. NestJS 介绍
NestJS 是一个基于 TypeScript 和 JavaScript 的渐进式 Node.js 框架,专注于构建可维护和可扩展的服务器端应用程序。它结合了 OOP(面向对象编程)、FP(函数式编程)和 FRP(函数响应式编程)的元素,提供了一种更结构化、模块化的方式来构建应用程序。
2. NestJS 环境配置
在开始使用 NestJS 之前,需要配置开发环境。确保已经安装了 Node.js 和 npm,并通过以下命令安装 NestJS CLI:
bashCopy code
npm install -g @nestjs/cli
3. NestJS CLI 的使用
NestJS CLI(Command Line Interface)是一个功能丰富的工具,用于简化 NestJS 项目的开发和管理。除了创建新项目之外,CLI 还支持生成控制器、服务、模块等。以下是一些常见的 CLI 命令和用例:
-
创建新项目:
nest new my-project
-
生成控制器:
nest generate controller users
-
生成服务:
nest generate service users
-
生成模块:
nest generate module auth
-
生成中间件:
nest generate middleware logger
NestJS CLI 还提供了丰富的命令集,用于生成模块、控制器、服务等
4. 使用命令行新建接口
在 NestJS 中,使用命令行新建接口通常需要按照一定的约定顺序,包括新建模块(Module)、控制器(Controller)、服务(Service)等。以下是基本的步骤:
4.1 新建模块(Module)
首先,我们需要在项目中创建一个新的模块。模块是 NestJS 中组织代码的基本单元,它将一组相关的组件(控制器、服务等)组织在一起。使用以下命令创建一个名为 users
的模块:
nest generate module users
4.2 新建控制器(Controller)
接下来,我们可以使用命令行创建一个控制器。控制器是处理传入请求并返回响应的地方。使用以下命令创建一个名为 users
的控制器:
nest generate controller users
4.3 新建服务(Service)
最后,我们还需要创建一个服务,服务负责处理业务逻辑。使用以下命令创建一个名为 users
的服务:
nest generate service users
4.4 模块文件
新建模块命令生成了一个名为 users.module.ts
的文件,这是 NestJS 模块的入口文件。模块文件包含了装饰器 @Module
,用于将控制器和服务与模块关联起来。
// users.module.ts
@Module({
controllers: [UsersController],
providers: [UsersService],
})
export class UsersModule {}
在模块文件中,通过 @Module
装饰器,我们将 UsersController
和 UsersService
注册到了 UsersModule
中。这使得 NestJS 能够正确地管理它们之间的依赖关系,并确保它们在需要的时候被正确实例化。
4.5 控制器和服务
-
控制器: 控制器负责接收请求,并将请求委派给服务进行处理。它包含了处理不同请求的方法,这些方法由装饰器标记,以便 NestJS 知道如何映射路由。
// users.controller.ts @Controller('users') export class UsersController { constructor(private readonly usersService: UsersService) {} @Get() findAll(): string { return this.usersService.findAll(); } }
-
服务: 服务包含了实际的业务逻辑。它可以与数据库交互、调用其他服务等。控制器将请求委派给服务,服务执行相应的操作并返回结果。
// users.service.ts @Injectable() export class UsersService { findAll(): string { return 'This action returns all users'; } }
通过以上步骤,我们成功地使用命令行新建了一个 users
模块,包含了控制器和服务。这种约定大于配置的方式可以让项目更具有结构性和可维护性。
5. 接口测试
在 NestJS 中,接口的测试是至关重要的。你可以使用浏览器测试和 Postman 测试等工具。通过浏览器可以直观地检查接口的返回结果,而 Postman 则提供了更灵活的接口测试和请求模拟功能。
举例来说,使用 Postman 可以创建一个 GET 请求到 http://localhost:3000/users
,观察返回的数据。
6. 传参(GET 和 POST 传参)
NestJS 支持多种方式传递参数。对于 GET 请求,可以使用 @Query()
装饰器获取查询参数。对于 POST 请求,可以使用 @Body()
装饰器获取请求体参数。
// 示例:获取 GET 请求的查询参数
@Get('example')
getExample(@Query('param') param: string) {
return `Received parameter: ${param}`;
}
// 示例:获取 POST 请求的请求体参数
@Post('example')
postExample(@Body() data: any) {
return `Received data: ${data}`;
}
6.1 Params 传参
对于路径中的参数,你可以使用 @Param()
装饰器。例如:
// 示例:获取路径中的参数
@Get('example/:id')
getExampleById(@Param('id') id: string) {
return `Received ID: ${id}`;
}
在这个例子中,我们使用 @Param('id')
来获取路径中名为 id
的参数。
这些装饰器提供了方便的方式在控制器中访问传递给接口的参数。
以上是 NestJS 学习笔记的第一部分,覆盖了 NestJS 的基本介绍、环境配置、CLI 的使用,以及创建和测试接口的基本步骤。在下一部分中,我们将深入探讨 NestJS 中更多高级的概念和功能。