NestJS基础教程
NestJS基础教程
1. 简介
NestJS是一个用于构建高效、可扩展的Node.js服务器端应用程序的框架。它使用渐进式JavaScript,内置支持TypeScript,并结合了OOP(面向对象编程)、FP(函数式编程)和FRP(函数式响应编程)的元素。
2. 安装和项目创建
2.1 安装NestJS CLI
npm i -g @nestjs/cli
2.2 创建新项目
nest new project-name
3. 核心概念
3.1 控制器(Controllers)
控制器负责处理传入的请求并向客户端返回响应。
import { Controller, Get } from '@nestjs/common';
@Controller('cats')
export class CatsController {
@Get()
findAll(): string {
return 'This action returns all cats';
}
}
3.2 提供者(Providers)
提供者是Nest的一个基本概念。许多基本的Nest类可能被视为提供者 – 服务、存储库、工厂、助手等。
import { Injectable } from '@nestjs/common';
@Injectable()
export class CatsService {
private readonly cats: Cat[] = [];
create(cat: Cat) {
this.cats.push(cat);
}
findAll(): Cat[] {
return this.cats;
}
}
3.3 模块(Modules)
模块是用@Module()
装饰器注解的类。每个应用程序至少有一个根模块。
import { Module } from '@nestjs/common';
import { CatsController } from './cats.controller';
import { CatsService } from './cats.service';
@Module({
controllers: [CatsController],
providers: [CatsService],
})
export class CatsModule {}
4. 数据传输和验证
4.1 DTO(数据传输对象)
export class CreateCatDto {
readonly name: string;
readonly age: number;
readonly breed: string;
}
4.2 管道验证
import { IsString, IsInt } from 'class-validator';
export class CreateCatDto {
@IsString()
readonly name: string;
@IsInt()
readonly age: number;
@IsString()
readonly breed: string;
}
5. 中间件(Middleware)
中间件是在路由处理程序之前调用的函数。
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();
}
}
6. 异常处理
NestJS提供了一个内置的异常层,负责处理应用程序中的所有错误。
import { HttpException, HttpStatus } from '@nestjs/common';
throw new HttpException('Forbidden', HttpStatus.FORBIDDEN);
7. 数据库集成
使用TypeORM示例:
import { TypeOrmModule } from '@nestjs/typeorm';
@Module({
imports: [
TypeOrmModule.forRoot({
type: 'mysql',
host: 'localhost',
port: 3306,
username: 'root',
password: 'root',
database: 'test',
entities: [],
synchronize: true,
}),
],
})
export class AppModule {}
8. 依赖注入
NestJS的核心原则之一是依赖注入。
@Controller('cats')
export class CatsController {
constructor(private catsService: CatsService) {}
@Get()
async findAll(): Promise<Cat[]> {
return this.catsService.findAll();
}
}
9. 最佳实践
9.1 项目结构
src/
├── cats/
│ ├── dto/
│ │ └── create-cat.dto.ts
│ ├── interfaces/
│ │ └── cat.interface.ts
│ ├── cats.controller.ts
│ ├── cats.service.ts
│ └── cats.module.ts
├── app.module.ts
└── main.ts
9.2 配置管理
使用@nestjs/config
包管理配置:
import { ConfigModule } from '@nestjs/config';
@Module({
imports: [
ConfigModule.forRoot({
isGlobal: true,
envFilePath: '.env',
}),
],
})
export class AppModule {}
10. 测试
NestJS提供了测试实用程序来简化测试过程。
import { Test, TestingModule } from '@nestjs/testing';
import { CatsController } from './cats.controller';
describe('CatsController', () => {
let controller: CatsController;
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
controllers: [CatsController],
}).compile();
controller = module.get<CatsController>(CatsController);
});
it('should be defined', () => {
expect(controller).toBeDefined();
});
});
11. 部署
建议的部署步骤:
- 编译TypeScript代码
npm run build
- 启动生产服务器
npm run start:prod
结语
这个基础教程涵盖了NestJS的主要概念和功能。要深入了解更多内容,建议查看官方文档和示例项目。记住,NestJS是一个强大的框架,掌握这些基础知识将帮助你构建可扩展的企业级应用程序。
原文地址:https://blog.csdn.net/wscfan/article/details/145100379
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!