夜猫子的知识栈 夜猫子的知识栈
首页
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《Web Api》
    • 《ES6教程》
    • 《Vue》
    • 《React》
    • 《TypeScript》
    • 《Git》
    • 《Uniapp》
    • 小程序笔记
    • 《Electron》
    • JS设计模式总结
  • 《前端架构》

    • 《微前端》
    • 《权限控制》
    • monorepo
  • 全栈项目

    • 任务管理日历
    • 无代码平台
    • 图书管理系统
  • HTML
  • CSS
  • Nodejs
  • Midway
  • Nest
  • MySql
  • 其他
  • 技术文档
  • GitHub技巧
  • 博客搭建
  • Ajax
  • Vite
  • Vitest
  • Nuxt
  • UI库文章
  • Docker
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

夜猫子

前端练习生
首页
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《Web Api》
    • 《ES6教程》
    • 《Vue》
    • 《React》
    • 《TypeScript》
    • 《Git》
    • 《Uniapp》
    • 小程序笔记
    • 《Electron》
    • JS设计模式总结
  • 《前端架构》

    • 《微前端》
    • 《权限控制》
    • monorepo
  • 全栈项目

    • 任务管理日历
    • 无代码平台
    • 图书管理系统
  • HTML
  • CSS
  • Nodejs
  • Midway
  • Nest
  • MySql
  • 其他
  • 技术文档
  • GitHub技巧
  • 博客搭建
  • Ajax
  • Vite
  • Vitest
  • Nuxt
  • UI库文章
  • Docker
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • Node基础

  • 《MySQL》学习笔记

  • Midway

  • Nest

    • 开篇词
    • 学习理由
    • nest概念扫盲
    • 快速掌握 nestcli
    • 5种http数据传输方式
    • IoC 解决了什么痛点问题?
    • 如何调试 Nest 项目
      • 方式一
      • 方式二
    • Provider注入对象
    • 全局模块和生命周期
    • AOP 架构有什么好处?
    • 一网打尽 Nest 全部装饰器
    • Nest如何自定义装饰器
    • Metadata和Reflector
    • ExecutionContext切换上下文
    • Module和Provider的循环依赖处理
    • 如何创建动态模块
    • Nest和Express,fastify
    • Nest的Middleware
    • RxJS和Interceptor
    • 内置Pipe和自定义Pipe
    • ValidationPipe验证post请求参数
    • 如何自定义 Exception Filter
    • 图解串一串 Nest 核心概念
    • 接口如何实现多版本共存
    • Express如何使用multer实现文件上传
    • Nest使用multer实现文件上传
    • 图书管理系统
    • 大文件分片上传
    • 最完美的 OSS 上传方案
    • Nest里如何打印日志
    • 为什么Node里要用Winston打印日志
    • Nest 集成日志框架 Winston
    • 通过Desktop学Docker也太简单了
    • 你的第一个 Dockerfile
  • 其他

  • 服务端
  • Nest
神说要有光
2025-03-10
目录

如何调试 Nest 项目

不少同学都是用 console.log 调试的,哪怕工作很多年依然是这样,这样有个致命的缺点:

你只能看到某个点的变量值,而看不到代码的整个执行路线。

对于复杂的项目来说,会用断点调试是必须的,因为这样可以看到作用域、调用栈,也就是代码的执行路线,然后单步运行来看变量的变化。

一般我们都在 VSCode 里写代码,因此调试的时候最好也是在VSCode编辑器里面调试,下面介绍一种最优雅的方式。

一般我们启动 nestjs 服务都是通过package.json的命令行npm run start:dev来启动的

"scripts": {
    "start": "nest start",
    "start:dev": "nest start --watch",
    "start:debug": "nest start --debug --watch",
  },
1
2
3
4
5

因此,调试的时候我们需要也要启动这个命令,如何做呢?

image.png

# 方式一

通过配置 launch.json 文件进行调试。

点击调试面板的 eate launch.json file,选择nodejs,会创建 .vscode/launch.json 的调试配置文件,删除原有的配置文件,然后选择nodejs:Launch via npm:

image.png

修改runtimeArgs、runtimeExecutable,如下:

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "debug nestjs",
      "request": "launch",
      "runtimeArgs": ["run", "start:dev"],
      "runtimeExecutable": "npm",
      "skipFiles": ["<node_internals>/**"],
      "type": "node"
    }
  ]
}
1
2
3
4
5
6
7
8
9
10
11
12
13

这里的 runtimeExecutable 代表执行什么命令,runtimeArgs 传参数,拼接起来就是npm run start:dev,这样就和package.json里面的npm run start:dev是一样的。

在需要断点处打上断点,然后点击右上角的按钮,启动调试:

image.png

注意,这时候我们并不需要在控制台用命令行启动npm run start:dev,当点击调试按钮时,就相当于已经执行了npm run start:dev。

在浏览器输入localhost:3000,可以发现已经停在了断点处。

image.png

在lauch.json中还有一个配置:

"console": "integratedTerminal"
1

如果不加这个配置,调试展示的信息是在 DEBUG CONSOLE中,这里面没有打印的信息没有颜色。

image.png

我们也可以指定打印的信息在vscode自带的终端中显示:

image.png

# 方式二

"scripts": {
    "start": "nest start",
    "start:dev": "nest start --watch",
    "start:debug": "nest start --debug --watch",
  },
1
2
3
4
5

直接通过命令 npm run start:debug 启动

不过这种方法需要配置 Attach 调试为总是。

image-20250314182700947

编辑 (opens new window)
上次更新: 2025/5/14 16:47:16
IoC 解决了什么痛点问题?
Provider注入对象

← IoC 解决了什么痛点问题? Provider注入对象→

最近更新
01
IoC 解决了什么痛点问题?
03-10
02
Provider注入对象
03-10
03
全局模块和生命周期
03-10
更多文章>
Copyright © 2019-2025 Study | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式