Nestjs基础入门,从零开始构建RESTful API
我正在学习NestJS框架,想从零开始构建一个RESTful API,但遇到了一些困惑:
- 如何正确安装和配置NestJS的开发环境?需要哪些基础工具和依赖?
- NestJS的核心概念(如模块、控制器、服务)具体该如何使用?能否结合RESTful API的例子说明?
- 在构建API时,如何设计路由、处理请求参数(如路径参数、查询参数)和返回响应?
- 如何连接数据库(比如MySQL或MongoDB)并进行基本的CRUD操作?
- 有没有推荐的中间件或管道(Pipe)来处理数据验证和转换?
- 部署NestJS项目时需要注意哪些关键配置?比如环境变量、生产模式优化等。
希望有经验的前辈能分享一下入门经验和常见问题的解决方案,谢谢!
好的!首先确保安装了Node.js和npm。接着创建项目:mkdir nest-api && cd $_
,然后初始化:npm init -y
。
安装NestJS CLI:npm i -g @nestjs/cli
。生成新项目:nest new api
,选择TS。
进入项目目录,运行开发服务器:npm run start:dev
,访问http://localhost:3000
确认启动成功。
创建模块:nest generate module cats
,再生成控制器和服务:nest generate controller cats --no-spec
和 nest generate service cats --no-spec
。
编辑cats.controller.ts
定义路由,如@Get()
获取所有猫。在cats.service.ts
实现逻辑。记得在app.module.ts
导入模块。
最后测试API,可以用Postman或curl,例如:curl http://localhost:3000/cats
。这就是一个简单的RESTful API雏形。后续可以添加实体、数据库等高级功能。
首先安装Node.js和NestJS CLI工具。使用nestjs new project-name
创建项目。API基本结构包括Controller、Service和Module。
- 初始化项目:运行
npm install
。 - 创建模块:使用
nestjs generate module users
生成users模块。 - 创建控制器:运行
nestjs generate controller users
,定义路由如GET /users
、POST /users
。 - 创建服务:执行
nestjs generate service users
,处理业务逻辑,比如从数据库获取用户数据。 - 定义实体:可以使用TypeORM或Mongoose,通过
generate entity
创建数据模型。 - 配置依赖注入:在服务中注入Repository,操作数据库。
- 测试API:启动应用
npm run start:dev
,用Postman测试接口。
示例代码:
// users.controller.ts
import { Controller, Get, Post, Body } from '@nestjs/common';
import { UsersService } from './users.service';
@Controller('users')
export class UsersController {
constructor(private readonly usersService: UsersService) {}
@Get()
findAll() {
return this.usersService.findAll();
}
@Post()
create(@Body() createUserDto: any) {
return this.usersService.create(createUserDto);
}
}
// users.service.ts
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { User } from './entities/user.entity';
@Injectable()
export class UsersService {
constructor(
@InjectRepository(User)
private usersRepository: Repository<User>,
) {}
async findAll(): Promise<User[]> {
return this.usersRepository.find();
}
async create(user: any): Promise<User> {
const createdUser = this.usersRepository.create(user);
return this.usersRepository.save(createdUser);
}
}
NestJS 基础入门:构建RESTful API
NestJS 是一个用于构建高效、可扩展的 Node.js 服务器端应用程序的框架。它使用渐进式 JavaScript,内置 TypeScript 支持。
1. 安装与初始化
首先确保已安装 Node.js,然后全局安装 Nest CLI:
npm i -g @nestjs/cli
nest new project-name
cd project-name
npm run start:dev
2. 基本概念
NestJS 核心概念包括:
- 控制器(Controllers):处理 HTTP 请求
- 服务(Providers):业务逻辑
- 模块(Modules):组织代码
3. 创建RESTful API
创建资源模块
nest generate resource users
用户控制器示例
// users.controller.ts
import { Controller, Get, Post, Body, Param } from '@nestjs/common';
import { UsersService } from './users.service';
@Controller('users')
export class UsersController {
constructor(private readonly usersService: UsersService) {}
@Post()
create(@Body() 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';
@Injectable()
export class UsersService {
private users = [];
create(user) {
this.users.push(user);
return user;
}
findAll() {
return this.users;
}
findOne(id: number) {
return this.users.find(user => user.id === id);
}
}
4. 数据验证
安装 class-validator 和 class-transformer:
npm install class-validator class-transformer
创建 DTO (Data Transfer Object):
// create-user.dto.ts
import { IsEmail, IsNotEmpty } from 'class-validator';
export class CreateUserDto {
@IsNotEmpty()
name: string;
@IsEmail()
email: string;
}
5. 运行与测试
启动开发服务器:
npm run start:dev
使用 Postman 或 curl 测试 API:
curl -X POST http://localhost:3000/users -H "Content-Type: application/json" -d '{"name":"John","email":"john@example.com"}'
这就是 NestJS 构建 RESTful API 的基础流程。NestJS 还支持更多高级功能如中间件、守卫、拦截器、管道等。