网站首页 > 基础教程 正文
1. 简介
NestJS 是一个用于构建高效、可扩展的 Node.js 服务器端应用程序的框架。它使用 TypeScript 编写,并结合了面向对象编程(OOP)、函数式编程(FP)和函数式响应式编程(FRP)的理念。NestJS 的架构深受 Angular 的启发,提供了模块化、依赖注入和开箱即用的支持,适用于构建企业级应用。
NestJS 的核心优势在于其高度可扩展性和对多种技术的支持,例如 REST API、GraphQL、WebSocket、微服务等。它还兼容 Express 和 Fastify,允许开发者根据需求选择底层 HTTP 引擎。
项目地址:
https://github.com/nestjs/nest
2. 主要功能
2.1 模块化架构
NestJS 采用模块化设计,应用程序由多个模块组成,每个模块封装了特定的功能。模块通过 @Module 装饰器定义,可以导入其他模块、提供服务和控制器。
示例代码:
import { Module } from '@nestjs/common';
import { CatsController } from './cats.controller';
import { CatsService } from './cats.service';
@Module({
controllers: [CatsController],
providers: [CatsService],
})
export class CatsModule {}
功能特点:
- 模块化设计,便于代码组织和维护。
- 支持依赖注入,提升代码的可测试性和可扩展性。
2.2 依赖注入(DI)
NestJS 内置了强大的依赖注入系统,允许开发者通过构造函数注入服务或其他依赖项。
示例代码:
import { Injectable } from '@nestjs/common';
@Injectable()
export class CatsService {
private readonly cats: string[] = [];
findAll(): string[] {
return this.cats;
}
}
功能特点:
- 自动管理依赖关系,减少手动实例化的复杂性。
- 提升代码的可测试性和可维护性。
2.3 控制器与路由
NestJS 使用控制器处理 HTTP 请求,并通过装饰器定义路由。
示例代码:
import { Controller, Get } from '@nestjs/common';
import { CatsService } from './cats.service';
@Controller('cats')
export class CatsController {
constructor(private readonly catsService: CatsService) {}
@Get()
findAll(): string[] {
return this.catsService.findAll();
}
}
功能特点:
- 支持 RESTful API 设计。
- 提供多种请求方法装饰器(如 @Get、@Post、@Put、@Delete 等)。
2.4 中间件
NestJS 支持中间件,可以在请求到达控制器之前或之后执行特定逻辑。
示例代码:
import { Injectable, NestMiddleware } from '@nestjs/common';
import { Request, Response, NextFunction } from 'express';
@Injectable()
export class LoggerMiddleware implements NestMiddleware {
use(req: Request, res: Response, next: NextFunction) {
console.log('Request...');
next();
}
}
功能特点:
- 支持全局或局部中间件。
- 兼容 Express 和 Fastify 的中间件。
2.5 异常过滤器
NestJS 提供了异常过滤器,用于捕获和处理应用程序中的异常。
示例代码:
import { ExceptionFilter, Catch, ArgumentsHost } from '@nestjs/common';
import { HttpException } from '@nestjs/common';
@Catch(HttpException)
export class HttpExceptionFilter implements ExceptionFilter {
catch(exception: HttpException, host: ArgumentsHost) {
const ctx = host.switchToHttp();
const response = ctx.getResponse();
const status = exception.getStatus();
response.status(status).json({
statusCode: status,
message: exception.message,
});
}
}
功能特点:
- 支持自定义异常处理逻辑。
- 提供统一的异常响应格式。
2.6 管道(Pipes)
管道用于验证和转换输入数据,例如请求参数或请求体。
示例代码:
import { PipeTransform, Injectable, ArgumentMetadata } from '@nestjs/common';
@Injectable()
export class ValidationPipe implements PipeTransform {
transform(value: any, metadata: ArgumentMetadata) {
// 验证或转换逻辑
return value;
}
}
功能特点:
- 支持数据验证和转换。
- 内置多种常用管道(如 ParseIntPipe、ValidationPipe 等)。
2.7 拦截器(Interceptors)
拦截器用于在请求处理前后添加额外的逻辑,例如日志记录、响应格式化等。
示例代码:
import { Injectable, NestInterceptor, ExecutionContext, CallHandler } from '@nestjs/common';
import { Observable } from 'rxjs';
import { tap } from 'rxjs/operators';
@Injectable()
export class LoggingInterceptor implements NestInterceptor {
intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
console.log('Before...');
return next.handle().pipe(tap(() => console.log('After...')));
}
}
功能特点:
- 支持请求前后的逻辑处理。
- 兼容 RxJS 的响应式编程。
2.8 GraphQL 支持
NestJS 提供了对 GraphQL 的原生支持,可以轻松构建 GraphQL API。
示例代码:
import { Resolver, Query } from '@nestjs/graphql';
@Resolver('Cat')
export class CatsResolver {
@Query(() => String)
async hello() {
return 'Hello World!';
}
}
功能特点:
- 支持 GraphQL 查询、变更和订阅。
- 提供类型安全的开发体验。
2.9 微服务支持
NestJS 支持多种微服务架构,包括 TCP、Redis、MQTT 等。
示例代码:
import { NestFactory } from '@nestjs/core';
import { Transport, MicroserviceOptions } from '@nestjs/microservices';
import { AppModule } from './app.module';
async function bootstrap() {
const app = await NestFactory.createMicroservice<MicroserviceOptions>(AppModule, {
transport: Transport.TCP,
options: { host: 'localhost', port: 3001 },
});
app.listen();
}
bootstrap();
功能特点:
- 支持多种通信协议。
- 提供统一的微服务开发模式。
3. 安装与使用
3.1 安装 NestJS CLI
NestJS 提供了命令行工具(CLI),用于快速创建和管理项目。
npm install -g @nestjs/cli
3.2 创建新项目
使用 CLI 创建一个新的 NestJS 项目:
nest new my-nest-app
3.3 启动开发服务器
进入项目目录并启动开发服务器:
cd my-nest-app
npm run start
访问 http://localhost:3000,即可看到默认的欢迎页面。
4. 使用场景
- RESTful API 开发:快速构建高性能的 REST API。
- GraphQL API 开发:支持类型安全的 GraphQL 开发。
- 微服务架构:适用于分布式系统和微服务架构。
- 企业级应用:模块化和依赖注入设计,适合大型项目。
5. 结论
NestJS 是一个功能强大且灵活的 Node.js 框架,适用于构建各种类型的服务器端应用程序。它结合了现代开发的最佳实践,提供了丰富的功能和工具,帮助开发者快速构建高效、可维护的应用。
参考资料:
NestJS 中文文档:
https://github.com/nestjs/nest/blob/master/readme_zh.md
NestJS 官方文档:https://docs.nestjs.com/
猜你喜欢
- 2025-05-02 Node.js 学习笔记:使用数据库(node.js 数据库访问)
- 2025-05-02 2025 年每个 JavaScript 开发者都应该了解的功能
- 2025-05-02 Node.js 是怎么找到模块的?(nodejs自带模块)
- 2025-05-02 安卓设备如何配置PAC代理服务器(安卓手机配置代理服务器)
- 2025-05-02 编码 10000 个小时后,开发者悟了:“不要急于发布!”
- 2025-05-02 iOS安全测试-Frida调试(M1通用)(ios frida检测)
- 2025-05-02 动力节点最新JavaScript教程(高级篇),深入学习JavaScript
- 2025-05-02 自动化测试中动态使用变量定位元素能提高代码的灵活性和复用性
- 2025-05-02 js获取链接内容(抓取html资源链接)
- 2025-05-02 最近很火的Vue Vine是如何实现一个文件中写多个组件
- 最近发表
- 标签列表
-
- jsp (69)
- pythonlist (60)
- gitpush (78)
- gitreset (66)
- python字典 (67)
- dockercp (63)
- gitclone命令 (63)
- dockersave (62)
- linux命令大全 (65)
- pythonif (68)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- console.table (62)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)