自学内容网 自学内容网

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. 部署

建议的部署步骤:

  1. 编译TypeScript代码
npm run build
  1. 启动生产服务器
npm run start:prod

结语

这个基础教程涵盖了NestJS的主要概念和功能。要深入了解更多内容,建议查看官方文档和示例项目。记住,NestJS是一个强大的框架,掌握这些基础知识将帮助你构建可扩展的企业级应用程序。


原文地址:https://blog.csdn.net/wscfan/article/details/145100379

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!