Nestjs零基础入门,一步一步学会构建后端服务
作为一个Nestjs新手,按照教程搭建后端服务时遇到几个问题想请教:1) 为什么我的控制器总是无法正确接收前端传递的JSON参数?2) 中间件的执行顺序应该如何控制?3) 在模块划分时,功能边界不太明确该怎么处理?4) 有没有适合初学者的项目结构最佳实践?5) 使用TypeORM时出现循环依赖该怎么解决?
-
安装与初始化:首先确保安装了Node.js,使用
npm i -g @nestjs/cli
安装Nest CLI。然后通过nest new project-name
创建项目。 -
项目结构:了解项目结构,如
src
目录下的app.module.ts
是应用的核心模块文件,main.ts
是入口文件。 -
控制器(Controller):通过
nest generate controller
命令生成控制器,比如nest g controller heroes
,处理HTTP请求。 -
服务(Service):生成服务文件
nest g service heroes
,用于业务逻辑实现。控制器调用服务完成具体操作。 -
路由与装饰器:学习使用装饰器如
@Get()
、@Post()
定义路由,理解参数绑定和响应格式。 -
依赖注入:掌握Nest的依赖注入机制,通过构造函数注入服务。
-
数据模型:集成TypeORM或Mongoose定义实体类,并配置数据库连接。
-
运行调试:使用
npm run start:dev
启动开发服务器,实时查看效果。 -
测试:学习编写单元测试和集成测试,使用Jest框架。
-
部署:打包应用(
npm run build
),部署到服务器上运行。
逐步实践这些步骤,就能构建一个完整的NestJS后端服务。
-
安装Node.js与NPM:首先确保你的电脑上安装了Node.js,它自带NPM包管理工具。
-
初始化项目:使用
npm init -y
创建一个新项目,并通过npm install @nestjs/cli -g
全局安装NestJS CLI。 -
创建项目骨架:运行
nest new project-name
生成项目结构,包含src目录和main.ts入口文件。 -
理解核心概念:熟悉模块(Module)、控制器(Controller)和提供者(Provider)等基本概念。
-
构建第一个API:
- 创建模块:
nest generate module app
- 创建控制器:
nest generate controller app
- 编写逻辑:在app.controller.ts中定义路由和处理函数。
- 运行服务:
npm run start:dev
启动开发服务器。
- 创建模块:
-
配置环境:编辑.env文件设置环境变量,并在main.ts中加载它们。
-
集成数据库:选择如TypeORM或Mongoose,安装相应依赖并配置连接字符串。
-
测试API:使用Postman或curl测试接口是否正常工作。
-
部署上线:打包为dist文件夹,使用PM2或其他进程管理器部署到服务器。
坚持实践每个步骤,逐步掌握NestJS的强大功能。
NestJS零基础入门指南
NestJS简介
NestJS是一个用于构建高效、可扩展的Node.js服务器端应用程序的框架,它使用渐进式JavaScript,内置TypeScript支持。
第一步:安装与创建项目
npm i -g @nestjs/cli
nest new project-name
cd project-name
npm run start:dev
核心概念
- 模块(Module) - 应用程序的组织单元
@Module({
imports: [],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
- 控制器(Controller) - 处理HTTP请求
@Controller('users')
export class UsersController {
@Get()
findAll(): string {
return 'All users';
}
}
- 服务(Service) - 业务逻辑层
@Injectable()
export class UsersService {
private readonly users: User[] = [];
create(user: User) {
this.users.push(user);
}
findAll(): User[] {
return this.users;
}
}
数据库连接示例
// app.module.ts
@Module({
imports: [
TypeOrmModule.forRoot({
type: 'mysql',
host: 'localhost',
port: 3306,
username: 'root',
password: 'password',
database: 'test',
entities: [],
synchronize: true,
}),
],
})
export class AppModule {}
基础项目结构
src/
├── app.controller.ts
├── app.module.ts
├── app.service.ts
├── main.ts
学习建议:
- 从官方文档开始
- 先理解依赖注入(DI)概念
- 从简单CRUD开始练习
- 逐步学习中间件、守卫、拦截器等高级特性