Skip to content

NestJS 简介 ​

NestJS 是一个用于构建高效、可扩展的 Node.js 服务器端应用程序的框架。它使用 TypeScript 编写,并结合了面向对象编程、函数式编程和函数反应式编程的元素。NestJS 构建在 Express 之上,但也可以与其他库一起使用。

原理 ​

NestJS 的核心是模块化的架构,允许开发者将应用程序分解成多个模块,每个模块负责特定的功能。主要原理包括:

  1. 模块(Modules):组织代码的基本单位,类似于功能块。
  2. 控制器(Controllers):处理传入的请求并返回响应。
  3. 提供者(Providers):服务、仓库等,可以注入到控制器或其他提供者中。
  4. 依赖注入(Dependency Injection):通过构造函数注入依赖,提升代码的可测试性和可维护性。

基本使用方法 ​

安装 NestJS CLI ​

首先,安装 NestJS CLI 工具:

bash
npm install -g @nestjs/cli

创建新项目 ​

使用 CLI 创建一个新的 NestJS 项目:

bash
nest new project-name

项目结构 ​

创建的项目包含以下主要文件和文件夹:

  • src/:源代码目录
    • app.module.ts:应用程序的根模块
    • app.controller.ts:处理 HTTP 请求的控制器
    • app.service.ts:提供业务逻辑的服务

创建模块 ​

可以使用 CLI 创建新的模块:

bash
nest generate module module-name

创建控制器 ​

同样,可以使用 CLI 创建新的控制器:

bash
nest generate controller controller-name

创建服务 ​

使用 CLI 创建新的服务:

bash
nest generate service service-name

使用快捷键 ​

  • nest g co book //创建一个 book 控制器
  • nest g s book //创建一个 book server 服务
  • nest g mo book //创建一个 book 模块
  • nest g gu book //创建一个 book 守卫
  • nest g in book //创建一个 book 拦截器
  • nest g f book //创建一个book 过滤器
shell
  name          │ alias       │ description                                  │
│ application   │ application │ Generate a new application workspace         │
│ class         │ cl          │ Generate a new class                         │
│ configuration │ config      │ Generate a CLI configuration file            │
│ controller    │ co          │ Generate a controller declaration            │
│ decorator     │ d           │ Generate a custom decorator                  │
│ filter        │ f           │ Generate a filter declaration                │
│ gateway       │ ga          │ Generate a gateway declaration               │
│ guard         │ gu          │ Generate a guard declaration                 │
│ interceptor   │ itc         │ Generate an interceptor declaration          │
│ interface     │ itf         │ Generate an interface                        │
│ library       │ lib         │ Generate a new library within a monorepo     │
│ middleware    │ mi          │ Generate a middleware declaration            │
│ module        │ mo          │ Generate a module declaration                │
│ pipe          │ pi          │ Generate a pipe declaration                  │
│ provider      │ pr          │ Generate a provider declaration              │
│ resolver      │ r           │ Generate a GraphQL resolver declaration      │
│ resource      │ res         │ Generate a new CRUD resource                 │
│ service       │ s           │ Generate a service declaration               │
│ sub-app       │ app         │ Generate a new application within a monorepo

单条示例

ts
nest g co book

一次性设置一整个模块,如生成一整个book模块

ts
nest g resource book

示例代码 ​

以下是一个简单的示例,展示如何创建一个基本的控制器和服务:

typescript
// app.controller.ts
import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';

@Controller()
export class AppController {
  constructor(private readonly appService: AppService) {}

  @Get()
  getHello(): string {
    return this.appService.getHello();
  }
}

// app.service.ts
import { Injectable } from '@nestjs/common';

@Injectable()
export class AppService {
  getHello(): string {
    return 'Hello World!';
  }
}

启动应用 ​

在项目根目录下运行以下命令启动应用:

bash
npm run start

访问 http://localhost:3000,你应该会看到 "Hello World!"。