Nestjs新手入门指南,一步步搭建自己的API
作为一个Nestjs新手,按照入门指南搭建API时遇到几个问题:
- 安装Nest CLI后初始化项目总是失败,提示依赖冲突,该如何解决?
- 控制器(Controller)和提供者(Provider)的区别是什么?能否用实际代码例子说明?
- 为什么我的@Get()路由无法访问?中间件配置有什么特别注意事项吗?
- 使用TypeORM连接数据库时,实体(Entity)文件应该放在哪个目录更规范?
- 有没有推荐的生产环境部署方案?比如Docker配置或PM2优化技巧?
首先安装Node.js和npm。接着创建项目文件夹并初始化npm init -y
。
- 安装Nest CLI:
npm install -g @nestjs/cli
。 - 创建新项目:
nest new project-name
。 - 进入项目目录,安装必要的依赖包如TypeORM、Postgres等:
npm install @nestjs/typeorm typeorm pg
. - 配置
app.module.ts
添加TypeORM模块,并设置数据库连接。
接下来是API的构建:
5. 创建模块:nest generate module users
。
6. 生成控制器和服务:nest generate controller users
和 nest generate service users
。
7. 在users.service.ts
中编写业务逻辑,在users.controller.ts
中定义路由。
8. 使用装饰器如@Controller
、@Get()
来定义接口。
运行服务:npm run start:dev
,测试API可用Postman或curl命令。记得配置好环境变量和错误处理,保证代码健壮性。最后不要忘记单元测试,用jest
可以快速开始。
首先安装Node.js和Nest CLI工具。全局安装Nest CLI:npm i -g @nestjs/cli
。创建项目:nest new project-name
。选择TS或JS。
启动项目:npm run start:dev
,访问http://localhost:3000
确认正常。创建模块:nest generate module app
,再生成控制器nest g controller user
和服务nest g service user
。
编辑users.controller.ts
定义接口:如@Get()
获取用户列表,@Post()
新增用户。在users.service.ts
实现业务逻辑。记得注入服务到控制器:constructor(private usersService: UsersService) {}
。
配置app.module.ts
引入模块。测试API可用性,可以使用Postman或cURL。最后,部署到服务器,比如PM2管理进程:pm2 start dist/main.js --name "my-api"
。
NestJS新手入门指南
第一步:安装和初始化
首先确保你已经安装了Node.js(建议14.x及以上版本),然后全局安装Nest CLI:
npm i -g @nestjs/cli
nest new project-name
第二步:项目结构了解
一个新创建的NestJS项目主要包含以下核心文件:
src/main.ts
- 应用入口文件src/app.module.ts
- 根模块src/app.controller.ts
- 基础控制器src/app.service.ts
- 基础服务
第三步:创建你的第一个API
- 生成一个新的资源:
nest generate resource users
- 这会创建完整的CRUD结构:
users.module.ts
- 用户模块users.controller.ts
- 用户控制器users.service.ts
- 用户服务dto
文件夹 - 数据传输对象
第四步:编写基础API
在users.controller.ts
中添加一个简单GET端点:
import { Controller, Get } from '@nestjs/common';
@Controller('users')
export class UsersController {
@Get()
findAll() {
return 'This action returns all users';
}
}
第五步:运行和测试
启动开发服务器:
npm run start:dev
访问 http://localhost:3000/users
应该能看到返回的文本。
第六步:进阶功能
- 使用DTO验证输入:
import { IsString, IsEmail } from 'class-validator';
export class CreateUserDto {
@IsString()
name: string;
@IsEmail()
email: string;
}
- 连接数据库: 安装TypeORM和数据库驱动(以PostgreSQL为例):
npm install @nestjs/typeorm typeorm pg
NestJS提供了完整的模块化架构和依赖注入系统,让API开发变得更加结构化。