Nestjs教程设计RESTful API

"最近在学Nestjs框架,想用它设计RESTful API,但遇到几个问题不太明白:

  1. 在Nestjs中如何正确划分Controller和Service的职责?Service层是否必须和每个Controller一一对应?
  2. 设计RESTful路由时,除了@Get/@Post这些装饰器,还需要注意哪些规范(比如状态码、DTO验证)?
  3. 文档说Nestjs支持依赖注入,但实际开发中如何合理规划Providers的模块划分?比如数据库连接和第三方服务该放在哪个模块?
  4. 有没有推荐的项目目录结构?感觉官方例子太简单,实际项目涉及中间件、拦截器时容易混乱。
    求有经验的大佬分享下实际项目中的最佳实践!"

3 回复

创建NestJS的RESTful API教程如下:

  1. 初始化项目
    使用npm安装NestJS CLI工具:

    npm i -g [@nestjs](/user/nestjs)/cli
    

    创建新项目:

    nest new project-name
    
  2. 定义模块和控制器
    创建模块和控制器来处理API路由。例如,创建一个CatsModuleCatsController

    nest generate module cats
    nest generate controller cats
    
  3. 配置路由
    cats.controller.ts中添加基本路由:

    import { Controller, Get, Post, Body } from '[@nestjs](/user/nestjs)/common';
    
    [@Controller](/user/Controller)('cats')
    export class CatsController {
        @Get()
        findAll(): string {
            return 'This action returns all cats';
        }
    
        @Post()
        create(@Body() cat: any): string {
            return 'This action adds a new cat';
        }
    }
    
  4. 定义服务与数据层
    创建CatsService管理业务逻辑:

    nest generate service cats
    

    cats.service.ts中实现逻辑。

  5. 启动应用
    启动开发服务器:

    npm run start:dev
    
  6. 测试API
    使用Postman或curl测试接口,例如访问http://localhost:3000/cats

  7. 优化
    添加DTO(数据传输对象)校验、依赖注入、数据库集成等高级功能。

通过以上步骤,你可以快速构建一个基础的NestJS RESTful API!


作为屌丝程序员,推荐从官方文档入手。首先安装Node.js和npm,然后通过npm i -g @nestjs/cli创建项目。定义模块时使用@Module装饰器,在控制器中用@Controller修饰类,并添加@Get@Post等装饰器定义路由。服务层通过@Injectable提供业务逻辑,利用@Injectable()注入到控制器。数据模型可以用TypeORM或Mongoose,记得配置好数据库连接。每个实体对应一个表,通过仓库模式操作数据库。处理异常时可自定义全局异常过滤器。测试API可以使用Postman或curl命令。建议多看官方示例代码,动手实践CRUD操作。记住保持代码简洁,避免过度设计,关注API的功能性和稳定性。如果遇到问题,先搜索官方文档和社区问答,实在不行再问人。

NestJS教程:设计RESTful API

NestJS是一个高效、可扩展的Node.js框架,非常适合构建RESTful API。以下是设计RESTful API的基本步骤:

1. 安装与创建项目

npm i -g @nestjs/cli
nest new project-name

2. 创建资源模块

nest generate resource users

这会自动生成控制器、服务、模块等文件。

3. 设计控制器

// users.controller.ts
import { Controller, Get, Post, Body, Param, Put, Delete } from '@nestjs/common';

@Controller('users')
export class UsersController {
  constructor(private readonly usersService: UsersService) {}

  @Post()
  create(@Body() createUserDto: CreateUserDto) {
    return this.usersService.create(createUserDto);
  }

  @Get()
  findAll() {
    return this.usersService.findAll();
  }

  @Get(':id')
  findOne(@Param('id') id: string) {
    return this.usersService.findOne(+id);
  }

  @Put(':id')
  update(@Param('id') id: string, @Body() updateUserDto: UpdateUserDto) {
    return this.usersService.update(+id, updateUserDto);
  }

  @Delete(':id')
  remove(@Param('id') id: string) {
    return this.usersService.remove(+id);
  }
}

4. 创建DTO

// create-user.dto.ts
export class CreateUserDto {
  readonly name: string;
  readonly email: string;
  readonly password: string;
}

5. 实现服务层

// users.service.ts
@Injectable()
export class UsersService {
  private users: User[] = [];

  create(user: CreateUserDto) {
    this.users.push(user);
    return user;
  }

  findAll() {
    return this.users;
  }

  findOne(id: number) {
    return this.users[id];
  }

  update(id: number, updatedUser: UpdateUserDto) {
    this.users[id] = updatedUser;
    return this.users[id];
  }

  remove(id: number) {
    this.users.splice(id, 1);
    return true;
  }
}

6. 运行API

npm run start:dev

API将运行在http://localhost:3000/users

最佳实践

  • 使用DTO进行数据验证
  • 遵循RESTful设计原则
  • 使用Swagger进行API文档化
  • 添加适当的异常过滤器
  • 实现认证和授权

你可以进一步扩展这个基础API,添加数据库连接、验证、缓存等功能。

回到顶部