Nestjs零基础入门,一步一步学会构建后端服务

作为一个Nestjs新手,按照教程搭建后端服务时遇到几个问题想请教:1) 为什么我的控制器总是无法正确接收前端传递的JSON参数?2) 中间件的执行顺序应该如何控制?3) 在模块划分时,功能边界不太明确该怎么处理?4) 有没有适合初学者的项目结构最佳实践?5) 使用TypeORM时出现循环依赖该怎么解决?

3 回复
  1. 安装与初始化:首先确保安装了Node.js,使用npm i -g @nestjs/cli安装Nest CLI。然后通过nest new project-name创建项目。

  2. 项目结构:了解项目结构,如src目录下的app.module.ts是应用的核心模块文件,main.ts是入口文件。

  3. 控制器(Controller):通过nest generate controller命令生成控制器,比如nest g controller heroes,处理HTTP请求。

  4. 服务(Service):生成服务文件nest g service heroes,用于业务逻辑实现。控制器调用服务完成具体操作。

  5. 路由与装饰器:学习使用装饰器如@Get()@Post()定义路由,理解参数绑定和响应格式。

  6. 依赖注入:掌握Nest的依赖注入机制,通过构造函数注入服务。

  7. 数据模型:集成TypeORM或Mongoose定义实体类,并配置数据库连接。

  8. 运行调试:使用npm run start:dev启动开发服务器,实时查看效果。

  9. 测试:学习编写单元测试和集成测试,使用Jest框架。

  10. 部署:打包应用(npm run build),部署到服务器上运行。

逐步实践这些步骤,就能构建一个完整的NestJS后端服务。


  1. 安装Node.js与NPM:首先确保你的电脑上安装了Node.js,它自带NPM包管理工具。

  2. 初始化项目:使用npm init -y创建一个新项目,并通过npm install @nestjs/cli -g全局安装NestJS CLI。

  3. 创建项目骨架:运行nest new project-name生成项目结构,包含src目录和main.ts入口文件。

  4. 理解核心概念:熟悉模块(Module)、控制器(Controller)和提供者(Provider)等基本概念。

  5. 构建第一个API

    • 创建模块:nest generate module app
    • 创建控制器:nest generate controller app
    • 编写逻辑:在app.controller.ts中定义路由和处理函数。
    • 运行服务:npm run start:dev启动开发服务器。
  6. 配置环境:编辑.env文件设置环境变量,并在main.ts中加载它们。

  7. 集成数据库:选择如TypeORM或Mongoose,安装相应依赖并配置连接字符串。

  8. 测试API:使用Postman或curl测试接口是否正常工作。

  9. 部署上线:打包为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

核心概念

  1. 模块(Module) - 应用程序的组织单元
@Module({
  imports: [],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}
  1. 控制器(Controller) - 处理HTTP请求
@Controller('users')
export class UsersController {
  @Get()
  findAll(): string {
    return 'All users';
  }
}
  1. 服务(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

学习建议:

  1. 从官方文档开始
  2. 先理解依赖注入(DI)概念
  3. 从简单CRUD开始练习
  4. 逐步学习中间件、守卫、拦截器等高级特性
回到顶部