【2026前端转 AI 全栈指南】第 2 章(下):NestJS 项目创建 · MongoDB 配置 · 项目启动与调试

文章系列:

【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 开始脚手架,可能需要几分钟(视网络而定)。期间会自动完成:

  1. 创建项目目录与基础文件结构(src/test/package.json 等)
  2. 初始化 Git 仓库(本教程加 --skip-git,由仓库根目录统一管理 Git)
  3. 安装全部依赖(@nestjs/corereflect-metadata 等)
  4. 配置 TypeScriptESLintPrettier 等开发工具

终端会显示类似:

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() };
  }
}

依赖注入的体现:

AppControllerconstructor 里注入 AppService ------ Nest 自动创建实例,不用手写 new AppService()。第 3 章会展开 Module / Provider。


第七部分:修改代码体验热重载

  1. 修改 app.service.tsgetHello() 的返回字符串
  2. 保存文件 ,观察终端 [Nest] ... File change detected
  3. 刷新浏览器,内容已更新

这就是 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)

  1. 下载 MongoDB Community MSI
  2. 安装时勾选 Install MongoDB as a Service
  3. 可选安装 MongoDB Compass(图形界面.我没有用这个,我使用了navcat)
  4. 打开 服务 面板,确认 MongoDB 服务 正在运行

第五部分:MongoDB Compass ,可视化工具都大同小异,能用就可以,我使用的是Navcat,可以根据自己的喜好来使用不同的工具。

!我使用的(https://i-blog.csdnimg.cn/direct/9ddbe58d97e243a0a731980e7d524313.png![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/2f227cff4eb74c97a630feaff6c3b4aa.png)

第六部分: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:可视化工具直接新增

  1. ai-interview-labCreate Collectionusers
  2. 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

  1. 运行和调试 → 创建 launch.json(Node.js)
  2. 或在 JavaScript Debug Terminal 中执行 pnpm run start:dev
  3. app.controller.tshealth() 行打断点,请求触发

本阶段常见踩坑

问题 解决
.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 连接错误
  • 本章截图已保存

面试追问

  1. NestJS 的 Module / Controller / Service 各负责什么?
  2. 什么是依赖注入?有什么好处?
  3. MongoDB 文档型存储适合存简历 JSON 的原因?
  4. MONGODB_URI 各部分含义?
  5. 开发环境 start:dev 热重载原理(了解即可)?

上一篇: 【2026前端转 AI 全栈指南】第 2 章(上):开发环境准备

相关推荐
大熊猫侯佩1 小时前
SwiftData 迁移深度指南:从入门到“填坑”(下集)
数据库·swift·编程语言
之歆1 小时前
Promise 基础技术深度解析:从回调地狱到链式调用
前端·okhttp·promise
大熊猫侯佩1 小时前
SwiftData 迁移深度指南:从入门到“填坑”(上集)
数据库·swift·编程语言
甲维斯1 小时前
国产版“Codex”初体验,智谱ZCode很强啊!
前端·人工智能·ai编程
我星期八休息1 小时前
Linux系统编程—mmap文件映射
java·linux·运维·服务器·数据库·mysql·spring
道友可好1 小时前
AI 怎么自己跑完一个 6 小时的任务?
前端·人工智能·后端
To_OC2 小时前
通义千问多模态生图踩坑记:我是如何把两个报错逐个干翻的
前端·aigc·vite
桌面运维家2 小时前
基于vDisk技术的Vol云桌面技术解析
数据库
放下华子我只抽RuiKe52 小时前
FastAPI 全栈后端(八):部署与运维
运维·数据库·react.js·oracle·数据挖掘·前端框架·fastapi