NestJS 学习笔记一

119 阅读4分钟

NestJS 学习笔记一

bdaa917ae84981d0ecdebef001108e7dd7eef7cb.jpg

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 装饰器,我们将 UsersControllerUsersService 注册到了 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 中更多高级的概念和功能。