如何从零开始用Nestjs构建一个完整的后端服务?

最近在学习Nestjs框架,看了些入门教程但还是不太清楚具体该怎么操作。想请教下各位大佬,如何从零开始用Nestjs构建一个完整的后端服务?主要包括哪些核心步骤?比如项目初始化、控制器编写、服务层设计、数据库连接这些关键环节具体要怎么实现?有没有什么最佳实践或者容易踩坑的地方需要注意?最好是能结合一个简单案例来说明整个开发流程,谢谢!

3 回复

Nestjs仿小米商城企业级Nodejs RBAC 微服务项目实战视频教程https://www.itying.com/goods-1139.html

首先安装Node.js和npm,接着创建项目文件夹并初始化npm init -y。安装Nest CLI工具:npm i -g @nestjs/cli,然后使用nest new project-name生成项目。

  1. 项目结构:进入项目目录,你会看到src文件夹包含主模块(app.module.ts)、主文件(app.main.ts)等。
  2. 启动服务:运行npm run start:dev,自动监听代码变化。
  3. 创建模块:例如nest generate module users,再创建控制器nest generate controller users
  4. 编写接口:在UserController中定义路由,如@Get()获取用户列表。
  5. 服务层:通过nest generate service users添加业务逻辑,注入到Controller。
  6. 配置环境变量:编辑.env文件,用ConfigModule加载。
  7. 数据库集成:安装TypeORM或Mongoose,配置数据库连接。
  8. JWT认证:引入@nestjs/jwt实现登录与Token验证。
  9. 测试:使用Postman测试API接口功能。

按照以上步骤即可搭建一个简单的NestJS后端服务。


  1. 安装Node.js与Nest CLI:首先确保安装了Node.js,然后全局安装Nest CLI (npm i -g @nestjs/cli)。

  2. 创建项目:使用nest new project-name生成新项目,按提示选择TS或JS。

  3. 项目结构:项目分为srctest文件夹。src下有app.module.ts主模块、main.ts入口文件等。

  4. 定义模块:运行nest generate module users创建模块,用于管理用户功能。

  5. 创建控制器:通过nest generate controller users生成控制器,处理HTTP请求。

  6. 编写服务:运行nest generate service users创建服务逻辑层。

  7. 路由与方法:在控制器中定义如@Get()@Post()等装饰器绑定路由,调用服务方法。

  8. 配置环境变量:修改.env文件,利用@nestjs/config读取配置。

  9. 启动服务:运行npm run start:dev开启开发服务器。

  10. 测试接口:使用Postman或Curl测试API。

逐步理解模块化设计、依赖注入、异步操作等核心概念,构建可扩展的后端服务。

NestJS 基础入门教程

什么是NestJS

NestJS是一个用于构建高效、可靠和可扩展的服务器端应用程序的渐进式Node.js框架。它使用TypeScript构建,结合了OOP(面向对象编程)、FP(函数式编程)和FRP(函数反应式编程)的概念。

安装与创建项目

首先确保已安装Node.js(>=12版本),然后安装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 - 基本服务

核心概念

1. 控制器(Controllers)

控制器负责处理传入请求并返回响应。创建控制器:

import { Controller, Get } from '@nestjs/common';

@Controller('cats')
export class CatsController {
  @Get()
  findAll(): string {
    return 'This action returns all cats';
  }
}

2. 提供者(Providers)

提供者是NestJS的基本概念,可以是服务、仓库、工厂等。创建服务:

import { Injectable } from '@nestjs/common';

@Injectable()
export class CatsService {
  private readonly cats: string[] = ['Tom', 'Jerry'];

  findAll(): string[] {
    return this.cats;
  }
}

3. 模块(Modules)

模块是装饰了@Module()装饰器的类,用于组织应用程序结构:

import { Module } from '@nestjs/common';
import { CatsController } from './cats.controller';
import { CatsService } from './cats.service';

@Module({
  controllers: [CatsController],
  providers: [CatsService],
})
export class CatsModule {}

运行项目

开发模式:

npm run start:dev

生产模式:

npm run start:prod

基本功能扩展

1. 中间件

import { Injectable, NestMiddleware } from '@nestjs/common';

@Injectable()
export class LoggerMiddleware implements NestMiddleware {
  use(req: any, res: any, next: () => void) {
    console.log('Request...');
    next();
  }
}

2. 异常过滤器

import { ExceptionFilter, Catch, ArgumentsHost } from '@nestjs/common';

@Catch()
export class AllExceptionsFilter implements ExceptionFilter {
  catch(exception: unknown, host: ArgumentsHost) {
    const ctx = host.switchToHttp();
    const response = ctx.getResponse();
    
    response.status(500).json({
      statusCode: 500,
      message: 'Internal server error',
    });
  }
}

总结

通过以上步骤,你已经了解了NestJS的基本概念和用法。NestJS还支持很多高级功能如微服务、GraphQL、WebSocket等,可以继续深入学习探索。

回到顶部