文章系列:
【2026前端转 AI 全栈指南】第 1 章:前言 · 后端架构 · 章节导览
【2026前端转 AI 全栈指南】第 2 章(上):开发环境准备
【2026前端转 AI 全栈指南】第 3 章:Nestjs框架全解(一)
第 2 章 · 开发环境准备(下)· 项目初始化
本章目录
- [2.2 NestJS 项目创建](#2.2 NestJS 项目创建)
- [2.3 MongoDB 安装与配置](#2.3 MongoDB 安装与配置)
- [2.4 项目启动与调试](#2.4 项目启动与调试)
- [2.5 本章总结](#2.5 本章总结)
【2026前端转 AI 全栈指南】第 2 章(上):开发环境准备 我们配好了 Node / pnpm / Git / VS Code / TypeScript 。
第 2 章(下) 进入 项目初始化:创建 NestJS 后端、安装 MongoDB、把 API 跑起来。
工程目录约定
project/
├── ts-practice/ # 第 2 章(上)TS 小实战
└── nestjs-demo/ # 本章创建 · NestJS 后端
学完本章你将拥有:
- 全局安装 Nest CLI ,创建
project/api/项目 - MongoDB 本地连接,可视化工具我使用的是NavCat,你也可以使用专门的Compass,这个下载比较麻烦。
- NestJS 连接 MongoDB ,
/接口可访问 - 会用 curl / Thunder Client 测接口,理解热重载
在开始之前,我想大家要思考几个问题:
1.什么是NestJS?
2.为什么我们要选择NestJS?
3.框架的优劣势是什么?
2.2 NestJS 项目创建
第一部分:什么是 NestJS?

NestJS 高效、可扩展的 Node.js 服务器端应用框架,用 TypeScript 编写,如果你用过Angular,或者你熟悉Java,你会发现nestjs借鉴了很多他们的核心思想,三者均强依赖「面向对象 + 依赖注入」思想,Nest 是典型的两者融合产物:
| 概念 | 作用 | 类比前端 |
|---|---|---|
| Module | 功能模块边界 | 功能文件夹 |
| Controller | 处理 HTTP 路由 | 路由 handler |
| Service | 业务逻辑 | composable / service |
| 依赖注入 DI | 自动组装依赖 | 不用自己 new 实例 |
为什么选择 NestJS?
1. 对前端开发者无缝衔接,大幅降低跨栈成本(核心优势)
NestJS 基于 JavaScript / TypeScript 构建,与前端技术栈 完全同源------不需要学习新语言语法,就能快速上手后端开发。
我们的目标也不是从零学一门新语言,而是把重心放在:
- 理解后端的 工程化思想 也就是业务能力
- 掌握 服务架构 与 生态能力
2. 企业级标准化架构,解决 Node.js 框架松散痛点
传统 Express / Koa 等框架灵活,但缺乏规范;大型项目容易出现架构混乱、难以维护的问题。
NestJS 提供一整套成熟的后端架构体系,对齐 企业级开发标准:
| 能力 | 说明 |
|---|---|
| 模块化(Modules) | 按业务功能拆分,结构清晰,多人协作职责明确,避免「面条式代码」 |
| 依赖注入(DI) | 实现解耦,提升可测试性与可维护性,迭代时不易牵一发而动全身 |
| 装饰器(Decorators) | 声明式写法简化路由、权限、接口声明,代码简洁,便于统一规范 |
| 完整请求链路 | 内置 Middleware、Guards、Interceptors、全局异常过滤器,覆盖请求全生命周期,轻松实现日志、鉴权、限流、统一响应 |
3. 原生 TypeScript 支持,开发体验与稳定性双重保障
NestJS 完全基于 TypeScript 构建,类型系统完善:
- 开发时获得 精准代码提示 与 类型检查,提前规避大量运行时错误
- 接口、Service、数据模型均可类型约束,健壮性更强,维护与迭代成本更低
4. 丰富的官方生态,快速集成业务能力
NestJS 拥有大量 官方维护 的高质量模块,开箱即用,稳定性与兼容性有保障:
| 方向 | 常用模块 |
|---|---|
| 数据库 | @nestjs/mongoose(MongoDB)、TypeORM 等 |
| 认证授权 | @nestjs/jwt、@nestjs/passport(JWT、OAuth 等) |
| 工具集成 | @nestjs/swagger(API 文档)、@nestjs/config(配置)、日志、缓存等 |
本教程 v1 会用到:Mongoose、JWT、Config 等,无需从零搭建基础能力。
5. 平缓的学习曲线,降低后端入门门槛
对熟悉前端的开发者,NestJS 上手成本极低:
- 借鉴 Angular 设计理念:模块化、装饰器、依赖注入与 Angular 高度同源
- 无 Angular 经验也可快速入门:官方文档从基础到进阶路径清晰,不易「上手难、踩坑多」
6. 活跃的社区与完善的文档,踩坑成本低
- GitHub 维护更新频繁,生态持续迭代
- 官方文档、Stack Overflow、国内社区资源成熟,问题容易找到解决方案
- 不会出现框架冷门、无人答疑的情况
7. 天然适配大型复杂应用的迭代与协作
| 特点 | 价值 |
|---|---|
| 分层架构 | Controller → Service → Repository,职责清晰,多人协作不易冲突 |
| 多模式支持 | 微服务、GraphQL、RESTful API 等,业务扩张时架构可扩展 |
| 长期演进 | 适合从教学项目到真实产品(如 面试帮)的持续迭代 |
第二部分:安装 NestJS CLI
什么是 Nest CLI?
脚手架工具,一条命令生成 Nest 项目结构(类似 nuxi init)。
全局安装:
bash
pnpm add -g @nestjs/cli
验证安装:
bash
nest --version

我安装的版本是11.0.14,建议大家跟我的版本一致。
第三部分:创建第一个 NestJS 项目
1. 创建项目
打开终端,进入你要存放项目的目录。本教程统一放在仓库 project/ 下(与 ts-practice/ 同级):
bash
cd project
执行 Nest CLI 创建命令:
bash
nest new nestjs-demo
2. 选择包管理器
text
? Which package manager would you ❤️ to use?
❯ npm
yarn
pnpm
用 方向键 选中 pnpm,回车确认。
| 情况 | 说明 |
|---|---|
| 已装 pnpm | 推荐选 pnpm,与本教程一致 |
| 只装了 npm | 可能默认 npm,也可先 npm i -g pnpm 再创建 |
本文命令带 --package-manager pnpm |
跳过此步,直接使用 pnpm |
3. 等待安装
回车后 CLI 开始脚手架,可能需要几分钟(视网络而定)。期间会自动完成:
- 创建项目目录与基础文件结构(
src/、test/、package.json等) - 初始化 Git 仓库(本教程加
--skip-git,由仓库根目录统一管理 Git) - 安装全部依赖(
@nestjs/core、reflect-metadata等) - 配置 TypeScript 、ESLint 、Prettier 等开发工具
终端会显示类似:
text
⚙ Installation in progress... ☕
此时请耐心等待,不要中断。
4. 项目创建成功
安装完成后,终端输出大致如下:
text
✔ Installation in progress... ☕
🚀 Successfully created project api
👉 Get started with the following commands:
$ cd api
$ pnpm run start:dev
Thanks for installing Nest 🙏
Please consider donating to our open collective
to help us maintain this package.
看到 Successfully created project api 即表示创建成功。
接下来按提示进入项目并启动(第五部分会详讲):
bash
cd nestjs-demo

第四部分:项目目录结构详解
bash
cd nestjs-demo
核心结构:
api/
├── src/
│ ├── main.ts # 入口:启动 HTTP 服务
│ ├── app.module.ts # 根模块:注册 Controller / Service
│ ├── app.controller.ts # 根控制器:路由
│ └── app.service.ts # 根服务:业务逻辑
├── test/ # e2e 测试
├── nest-cli.json # Nest CLI 配置
├── tsconfig.json # TypeScript 配置
└── package.json
| 文件 | 说明 |
|---|---|
main.ts |
NestFactory.create() 创建应用,监听端口 |
app.module.ts |
@Module 装饰器,imports / controllers / providers |
app.controller.ts |
@Get() 等定义 API 路径 |
app.service.ts |
@Injectable() 可被 Controller 注入 |

第五部分:启动项目
启动开发服务器(热重载):
bash
cd project/nestjs-demo
pnpm run start:dev
期望终端输出(节选):
[Nest] ... LOG [NestFactory] Starting Nest application...
[Nest] ... LOG [NestApplication] Nest application successfully started

默认端口 3000 。本教程改为 3001 (避免与后续 Nuxt 冲突),在 src/main.ts:
typescript
await app.listen(process.env.PORT ?? 3001);
测试接口:
- 浏览器:
http://localhost:3001→ 默认 Hello World - 健康检查(本章新增):
http://localhost:3001/
使用 curl:
bash
curl http://localhost:3001

看到这个结果,那么我们的项目就是成功启动了!
第六部分:理解第一个 API
请求流程:
HTTP GET /health
→ AppController.health()
→ 返回 JSON 对象
→ 浏览器 / curl 显示
代码流程(示意):
typescript
// app.controller.ts
@Controller()
export class AppController {
constructor(private readonly appService: AppService) {}
@Get('health')
health() {
return { service: 'ai-interview-lab-api', ok: true, ts: Date.now() };
}
}
依赖注入的体现:
AppController 的 constructor 里注入 AppService ------ Nest 自动创建实例,不用手写 new AppService()。第 3 章会展开 Module / Provider。

第七部分:修改代码体验热重载
- 修改
app.service.ts里getHello()的返回字符串 - 保存文件 ,观察终端
[Nest] ... File change detected - 刷新浏览器,内容已更新
这就是 start:dev 热重载 ------ 改 TS 不用手动重启。
NestJS 常见问题排查
| 问题 | 原因 | 解决 |
|---|---|---|
| 端口被占用 | 3000/3001 已被占用 | 改 PORT 或结束占用进程 |
| 依赖安装失败 | 网络 / 源 | 换 npm 镜像后删 node_modules 重装 |
| TS 编译错误 | 类型不匹配 | 看终端红线,对照第 2 章(上)TS 节 |
nest 命令找不到 |
CLI 未全局安装或未进 PATH | pnpm add -g @nestjs/cli 后重开终端 |
| 项目创建很慢 | 首次下载依赖 | 正常现象,可换镜像 |
2.3 MongoDB 安装与配置
第一部分:MongoDB 简介

什么是 MongoDB?
开源 文档型 NoSQL 数据库 ,数据以 BSON/JSON 文档存储,适合简历这种 结构灵活 的业务。
为什么选择 MongoDB?(本教程)
- 简历 JSON 字段随模板变化,文档库比固定表结构省事
- 与 NestJS 通过 Mongoose 集成成熟
- 面试帮生产环境使用 MongoDB
NoSQL vs SQL 简对比:
| SQL(MySQL) | MongoDB | |
|---|---|---|
| 数据单元 | 行 row | 文档 document |
| 表 | table | 集合 collection |
| schema | 固定列 | 灵活字段 |
| 本教程 | 不选用 | ✅ 选用 |
第二部分:MongoDB 基础概念
| 概念 | 说明 | 本教程对应 |
|---|---|---|
| Database | 数据库 | ai-interview-lab |
| Collection | 集合 | users / resumes / quiz_records |
| Document | 文档 | 一条简历 JSON |
示例文档:
json
{
"_id": "665a1b2c3d4e5f6789012345",
"username": "demo",
"createdAt": "2026-06-04T10:00:00.000Z"
}
第三部分:MongoDB 安装(Mac)
方法一:Homebrew(推荐)
bash
brew tap mongodb/brew
brew install mongodb-community@7.0
brew services start mongodb-community@7.0
方法二:官网安装包
MongoDB Community 下载 → 按向导安装 → 启动服务。
校验:
bash
mongosh --version
mongosh
# > show dbs
第四部分:MongoDB 安装(Windows)
- 下载 MongoDB Community MSI
- 安装时勾选 Install MongoDB as a Service
- 可选安装 MongoDB Compass(图形界面.我没有用这个,我使用了navcat)
- 打开 服务 面板,确认
MongoDB服务 正在运行

第五部分:MongoDB Compass ,可视化工具都大同小异,能用就可以,我使用的是Navcat,可以根据自己的喜好来使用不同的工具。
第六部分:MongoDB 基础操作(Shell)
bash
mongosh
| 命令 | 作用 |
|---|---|
show dbs |
列出数据库 |
use ai-interview-lab |
切换库 |
show collections |
列出集合 |
db.users.insertOne({ username: 'test' }) |
插入一条 |
db.users.find() |
查询 |
第七部分:在 NestJS 中连接 MongoDB
1. 安装依赖
bash
cd project/nestjs-demo
pnpm add @nestjs/mongoose mongoose @nestjs/config
2. 环境变量 nestjs-demo/.env
PORT=3001
MONGODB_URI=mongodb://127.0.0.1:27017/ai-interview-lab
复制为模板提交 Git:
bash
cp .env .env.example
# .env 加入 .gitignore
3. 修改 app.module.ts
typescript
import { Module } from '@nestjs/common';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { MongooseModule } from '@nestjs/mongoose';
import { AppController } from './app.controller';
import { AppService } from './app.service';
@Module({
imports: [
ConfigModule.forRoot({ isGlobal: true }),
MongooseModule.forRootAsync({
imports: [ConfigModule],
inject: [ConfigService],
useFactory: (config: ConfigService) => ({
uri: config.get<string>('MONGODB_URI'),
}),
}),
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
4. 验证连接
bash
pnpm run start:dev
终端无 Mongo 连接报错;Compass 中能看到 ai-interview-lab 库被访问。

第八部分:连接字符串详解
格式:
mongodb://[用户名:密码@]主机:端口/数据库名[?选项]
示例:
| 场景 | 连接串 |
|---|---|
| 本地无鉴权 | mongodb://127.0.0.1:27017/ai-interview-lab |
| Atlas | mongodb+srv://user:pass@cluster.xxx.mongodb.net/ai-interview-lab |
常用选项:
retryWrites=true(Atlas 默认)- IP 白名单(Atlas 必配)
第九部分:实战 · 创建第一个集合
方式 A:可视化工具直接新增
- 库
ai-interview-lab→ Create Collection →users - ADD DATA → Insert Document:
json
{ "username": "demo", "note": "第2章下测试" }
方式 B:mongosh
javascript
use ai-interview-lab
db.users.insertOne({ username: 'demo', note: '第2章下测试' })
db.users.find()
后续第 4 章会用 Mongoose Schema 替代手写插入;本章只需确认 库能连、集合能建。
MongoDB 常见问题排查
| 问题 | 解决 |
|---|---|
| MongoDB 服务未启动 | Windows 服务 / Mac brew services start |
| 端口 27017 被占用 | 改配置或结束冲突进程 |
| 权限问题 | 本地开发一般用无鉴权;生产必须设用户密码 |
| 连接超时(Atlas) | 检查 IP 白名单、网络、连接串 |
| 数据目录权限 | Mac/Linux 检查 dbPath 目录权限 |
| Homebrew 安装失败 | brew update 后重试,或改用手动安装包 |
2.4 项目启动与调试
日常启动流程
bash
# 1. 确保 MongoDB 已启动(本地或 Atlas)
# 2. 启动 API
cd project/api
pnpm run start:dev
| 检查项 | 地址 / 命令 |
|---|---|
| Hello | http://localhost:3001 |
| Health | http://localhost:3001/health |
| curl | curl http://localhost:3001/health |
VS Code 调试 NestJS
- 运行和调试 → 创建
launch.json(Node.js) - 或在 JavaScript Debug Terminal 中执行
pnpm run start:dev - 在
app.controller.ts的health()行打断点,请求触发
本阶段常见踩坑
| 问题 | 解决 |
|---|---|
.env 不生效 |
确认 ConfigModule.forRoot() 已导入;重启 start:dev |
| Mongo 连接失败但 API 仍启动 | 检查 MongooseModule 配置;看完整报错栈 |
| 改了代码不热重载 | 确认用的是 start:dev 不是 start |
2.5 本章总结
知识体系
Nest CLI 创建 project/api/
↓
理解 Module / Controller / Service + /health
↓
MongoDB 安装 + Compass + mongosh
↓
NestJS + Mongoose 连接 MONGODB_URI
↓
Thunder Client / curl 联调
↓
下一章:NestJS 框架概念深化 → 第 4 章 Schema 设计
完成清单
-
nest --version有输出 -
project/api/创建成功 -
pnpm run start:dev启动无报错 -
/health返回 JSON - MongoDB 本地或 Atlas 可连
- Compass 能看到
ai-interview-lab库 - Nest 日志无 Mongo 连接错误
- 本章截图已保存
面试追问
- NestJS 的 Module / Controller / Service 各负责什么?
- 什么是依赖注入?有什么好处?
- MongoDB 文档型存储适合存简历 JSON 的原因?
MONGODB_URI各部分含义?- 开发环境
start:dev热重载原理(了解即可)?