如何从零开始用Nestjs构建一个完整的后端服务?
最近在学习Nestjs框架,看了些入门教程但还是不太清楚具体该怎么操作。想请教下各位大佬,如何从零开始用Nestjs构建一个完整的后端服务?主要包括哪些核心步骤?比如项目初始化、控制器编写、服务层设计、数据库连接这些关键环节具体要怎么实现?有没有什么最佳实践或者容易踩坑的地方需要注意?最好是能结合一个简单案例来说明整个开发流程,谢谢!
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
生成项目。
- 项目结构:进入项目目录,你会看到src文件夹包含主模块(app.module.ts)、主文件(app.main.ts)等。
- 启动服务:运行
npm run start:dev
,自动监听代码变化。 - 创建模块:例如
nest generate module users
,再创建控制器nest generate controller users
。 - 编写接口:在UserController中定义路由,如
@Get()
获取用户列表。 - 服务层:通过
nest generate service users
添加业务逻辑,注入到Controller。 - 配置环境变量:编辑
.env
文件,用ConfigModule
加载。 - 数据库集成:安装TypeORM或Mongoose,配置数据库连接。
- JWT认证:引入
@nestjs/jwt
实现登录与Token验证。 - 测试:使用Postman测试API接口功能。
按照以上步骤即可搭建一个简单的NestJS后端服务。
-
安装Node.js与Nest CLI:首先确保安装了Node.js,然后全局安装Nest CLI (
npm i -g @nestjs/cli
)。 -
创建项目:使用
nest new project-name
生成新项目,按提示选择TS或JS。 -
项目结构:项目分为
src
和test
文件夹。src
下有app.module.ts
主模块、main.ts
入口文件等。 -
定义模块:运行
nest generate module users
创建模块,用于管理用户功能。 -
创建控制器:通过
nest generate controller users
生成控制器,处理HTTP请求。 -
编写服务:运行
nest generate service users
创建服务逻辑层。 -
路由与方法:在控制器中定义如
@Get()
、@Post()
等装饰器绑定路由,调用服务方法。 -
配置环境变量:修改
.env
文件,利用@nestjs/config
读取配置。 -
启动服务:运行
npm run start:dev
开启开发服务器。 -
测试接口:使用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等,可以继续深入学习探索。