Nestjs基础入门教程手把手教你创建RESTful API

刚接触Nestjs,按照教程创建RESTful API时遇到几个问题:

  1. 为什么我的控制器@Get()装饰器无法正确响应GET请求?
  2. 如何优雅地处理POST请求的DTO数据验证?
  3. 服务层和控制器层之间应该怎样传递数据才符合最佳实践?
  4. Nestjs的模块化设计在实际项目中应该如何组织目录结构?
  5. 为什么我的providers在跨模块使用时出现依赖注入失败?
  6. 能否用简单示例说明中间件在RESTful API中的实际应用场景?
3 回复
  1. 初始化项目:首先安装nestjs cli (npm i -g [@nestjs](/user/nestjs)/cli),然后创建项目 (nest new project-name)。

  2. 定义模块和控制器:运行 nest generate module app 创建模块,接着生成控制器 (nest generate controller app)。

  3. 配置路由:在控制器文件中使用装饰器定义路由,例如:

    import { Controller, Get } from '[@nestjs](/user/nestjs)/common';
    [@Controller](/user/Controller)('users')
    export class AppController {
      @Get()
      findAll(): string {
        return 'This action returns all users';
      }
    }
    
  4. 服务与数据处理:创建服务 (nest generate service app) 来处理业务逻辑。比如从数据库获取用户数据。

  5. 启动应用:运行 npm run start:dev 启动开发服务器,访问 http://localhost:3000/users 查看效果。

  6. POST/PUT/PATCH/DELETE:添加对应方法如 @Post(), @Put() 等,并在服务中实现具体逻辑。

  7. 测试API:使用Postman或cURL测试各种请求,确保接口正常工作。

通过以上步骤即可完成一个简单的RESTful API构建。记得每次修改后都重启服务来应用更改。


  1. 安装Node.js和Nest CLI:全局安装Nest CLI工具npm install -g @nestjs/cli
  2. 创建项目:运行nest new project-name
  3. 启动项目:使用npm run start:dev启动开发服务器。
  4. 创建模块:执行nest generate module app生成模块。
  5. 创建服务:通过nest generate service app创建业务逻辑服务。
  6. 创建控制器:运行nest generate controller app构建REST接口。
  7. 编写API:在控制器中定义路由方法如@Get(), @Post()等。
  8. 操作数据:调用服务处理数据库操作或逻辑计算。
  9. 测试API:使用Postman或cURL测试接口。
  10. 配置环境:编辑.env文件管理不同环境配置。
  11. 使用装饰器:如@Body(), @Param()等获取请求数据。
  12. 启动生产:优化性能后部署到服务器。

以上步骤涵盖从零搭建NestJS项目的完整流程,帮助快速掌握构建RESTful API的基础知识。

NestJS 基础入门:创建RESTful API

1. 安装与创建项目

首先确保已安装Node.js,然后安装Nest CLI:

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

2. 项目结构介绍

主要目录:

  • src/ - 核心代码
    • main.ts - 应用入口
    • app.module.ts - 根模块
    • app.controller.ts - 示例控制器
    • app.service.ts - 示例服务

3. 创建RESTful API

生成资源

nest generate resource users

这将创建完整的CRUD结构(控制器、服务、模块等)

示例控制器

// users.controller.ts
import { Controller, Get, Post, Body, Param } from '@nestjs/common';
import { UsersService } from './users.service';
import { CreateUserDto } from './dto/create-user.dto';

@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);
  }
}

示例服务

// users.service.ts
import { Injectable } from '@nestjs/common';
import { CreateUserDto } from './dto/create-user.dto';

@Injectable()
export class UsersService {
  private users = [];

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

  findAll() {
    return this.users;
  }

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

DTO (数据传输对象)

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

4. 运行项目

npm run start:dev

现在你可以访问:

  • GET /users - 获取所有用户
  • POST /users - 创建新用户
  • GET /users/1 - 获取ID为1的用户

NestJS会自动将响应转换为JSON格式。

回到顶部