NestJS 简介
NestJS (Nest) 是一个渐进式框架,用于在 Node.js 上构建高效、可扩展且可靠的服务器端应用程序。它使用 TypeScript 作为主要语言,并受到 Angular 架构的启发。NestJS 提供了现成的应用程序架构,帮助开发者创建结构良好、可测试且易于维护的代码。
NestJS 的主要目标是解决 Node.js 生态系统中缺乏清晰架构的问题。与 Express 或 Fastify 等极简且不强制结构的框架不同,NestJS 提供了现成的抽象层:模块、控制器、服务、提供者和中间件。这对于注重代码可预测性和标准化的大型企业项目尤其有用。
NestJS 构建在 HTTP 框架之上(默认使用 Express,但也可以使用 Fastify),并在此基础上增加了强大的依赖注入系统、装饰器、守卫、拦截器、管道和过滤器。该框架大量使用 TypeScript 装饰器,使代码具有声明性和可读性。
安装 NestJS
要安装 NestJS,您需要 Node.js(版本 16 或更高)和包管理器 npm(或 yarn、pnpm)。
最简单的入门方法是使用 Nest CLI:
npm install -g @nestjs/clinest new my-nest-projectcd my-nest-projectnpm run start:dev如果您希望将 NestJS 安装到现有项目中:
npm install @nestjs/core @nestjs/common @nestjs/platform-express reflect-metadata rxjs typescript @types/node此外,还需要安装 TypeScript 和 ts-node 用于开发:
npm install -D typescript @types/node ts-node重要提示:NestJS 使用 reflect-metadata 库来处理装饰器。请确保在主文件 main.ts 中导入它:
import "reflect-metadata";快速入门及代码示例
让我们创建一个简单的 REST API 应用程序,其中包含一个返回问候语的端点。
项目结构:
src/├── app.controller.ts├── app.module.ts├── app.service.ts└── main.tsmain.ts — 入口点:
import { NestFactory } from '@nestjs/core';import { AppModule } from './app.module';
async function bootstrap() { const app = await NestFactory.create(AppModule); await app.listen(3000); console.log('Server is running on http://localhost:3000');}bootstrap();app.module.ts — 根模块:
import { Module } from '@nestjs/common';import { AppController } from './app.controller';import { AppService } from './app.service';
@Module({ imports: [], controllers: [AppController], providers: [AppService],})export class AppModule {}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!'; }}使用命令 npm run start:dev 启动应用程序,然后打开 http://localhost:3000。您将看到 "Hello World!"。
NestJS 的主要方法和功能
让我们看看每个项目中都会用到的 10 个 NestJS 关键元素。
1. @Module() — 模块装饰器
作用: 定义类