配置 debug 环境
在 Chrome 中 debug
node.js 有一种node inspect调试模式,即使用命令:
js1node --inspect-brk <entry>
-brk会让代码在首行断住。
例如入口文件为 index.js,则使用node --inspect-brk index.js,我们往往会在 scripts里配置脚本:
json1 "scripts": { 2 "start:debug": "node --inspect-brk index.js", 3 },
这样就可以使用脚本命令进入 debug 状态了。
nest 是 node 框架,自然也可以这么使用,并且 nest 已经内置了start:debug脚本,我们直接执行以下命令:
bash1pnpm run start:debug
该命令会在本地开启一个 ws 服务:
bash1Debugger listening on ws://127.0.0.1:9229/58402875-128d-47be-adc1-2e9cbf04c528 2For help, see: https://nodejs.org/en/docs/inspector 3Debugger attached.
可以看到 ws 服务的端口号为 9229。
我们可以直接使用Chrome DevTools 调试客户端连上它。
接着修改代码,在需要断点的地方输入debugger,因为默认并没有-brk 参数,所以手动在需要断点的地方 break。
typescript1 @Get() 2 getHello(): string { 3 debugger; 4 return this.appService.getHello(); 5 }
再进入http://localhost:3000/,打开 Chrome DevTools,会看到有一个按钮,点击它就能够进入 debug 界面。

下面界面就是浏览器的 node 调试面板。

如果没有出现该按钮,说明浏览器的 Dev Tools 还没有连到 ws 上,需要配置一下 network targets :
-
输入
chrome://inspect查看配置。如果没有 Remote Target 就需要点击 configure 按钮。

-
输入
localhost:9229
这种调试方法的好处是比较容易,chrome 的 debug 调试界面体验比较好,适合习惯 chrome 浏览器的前端同学。
在 VSCode 中 debug
有些同学可能更喜欢于利用 IDE 来断点调试,这里再介绍直接用 VSCode 调试的方法。
仅用 vscode 调试可以不用执行pnpm run dev:debug。
在 vscode 的 Run and Debug 下创建launch.json文件。

launch.json 是 vscode 调试的配置文件。
输入 npm,点击Node.js:Launch via npm

按照以下配置修改:
json1{ 2 "type": "node", 3 "request": "launch", 4 "name": "Launch via NPM", 5 "runtimeExecutable": "pnpm", 6 "args": ["run", "start:dev"], 7 "skipFiles": ["<node_internals>/**"], 8 "console": "integratedTerminal" 9}
- runtimeExecutable :表示执行工具,可以是 npm、yarn、pnpm 等。
- runtimeArgs :执行时的参数,对应
pnpm run start:dev启动开发的脚本 - console :让日志在 vscode 内置的终端(即
integratedTerminal)打印,否则默认在DEBUG CONSOLE中打印。
然后按下 F5 进入调试模式,并在需要断点的代码左边打个断点

在浏览器中输入http://localhost:3000/,代码就会在当前行 break 住。

现在已经实现跟 Chrome 一样的 debug 效果了。
但是,VSC 断点调试还额外支持不同的断点模式,右键查看:

-
Breakpoint 即让代码停住的断点
这种就是常用的断点方法。
-
Conditional Breakpoint 条件断点
条件成立时才会断住,否则就直接过去。

-
Logpoint 日志断点
如果我不想
console.log查看某个变量,就可以用 Logpoint。
在 log message 里写你想要看的信息,变量写在
{}中, 按回车确定。当代码经过时,就会在控制台中输出日志:
bash1result is 'Hello World!' -
Caught Exceptions 在没有处理异常的地方停住的断点
等到 debug 程序启动后,勾选 Caught Exceptions(这里注意顺序,不能一开始直接勾选,否则很可能启动不了)

当执行到报错行时,代码会停住。

总结
nest 有两种 debug 的方式:
- 通过 Chrome 浏览器
- 通过 IDE
nest 项目最方便的调试方式还是在 VSCode 里添加 npm run start:dev 的调试配置,除了常规的 Breakpoint 外,还有 Conditional Breakpoint、Logpoint、Caught Exceptions 这几种断点类型。