转载:https://www.jianshu.com/p/6fd5a476d135
调试 Express 代码
初始化 express 工程。
$ mkdir express-demo $ cd express-demo $ npm init -y $ npm install express
创建 index.js 文件,内容如下
const express = require('express') const app = express() app.get('/', (req, res) => { const a = 1 const b = 2 const c = a + b res.end(`a + b = ${c}`) }) app.listen('3000', function () { console.log('服务器已启动,端口', 3000) })
方法一:request: launch
参考前文 Vscode 调试,添加配置文件如下:
// .vscode/launch.json { "type": "node", "request": "launch", "name": "Express launch", "program": "${workspaceFolder}/index.js" }
express 项目有个入口文件 index.js,平时启动服务需要输入 $ node index.js,调试的时候使用内置的调试器程序启动 index.js。
request: "launch" 表示使用调试器程序启动 index.js 文件。
方法二:request: attach
正常启动 Express 服务。
![](http://upload-images.jianshu.io/upload_images/6693922-dc280372d31ef527.png?imageMogr2/auto-orient/strip|imageView2/2/w/361/format/webp)
图1
此时突然想调试某个接口,如果使用 launch 方式,需要 Ctrl + C 停掉当前服务,然后用调试器程序重新执行 index.js。但是现在不想重启服务,又要对代码进行调试,可以使用 attach 方式。
添加调试配置文件如下。
// .vscode/launch.json { "type": "node", "request": "attach", "name": "Express attach", "processId": "${command:PickProcess}", "port": 9229 }
- request: "attach" 表示 Nodejs 程序已经在运行着,待会启动调试器程序,去关联这个已经运行的 Nodejs 程序;
- processId: "${command:PickProcess}" 进程ID,后面花括弧里的东东不用管,意思当你点击 Vscode 调试面板绿色箭头(下图红字1)时会弹出一个下拉框让你选择:调试器程序关联哪一个正在运行的 Nodejs 程序(下图红字2)。
![](http://upload-images.jianshu.io/upload_images/6693922-e8e419a1629863d2.png?imageMogr2/auto-orient/strip|imageView2/2/w/799/format/webp)
图2
我的机器上起了好几个 Nodejs 程序,跑 express-demo 的是第二个 Nodejs 程序,点击之后再看看终端,会打印一些新的消息,其中 Debugger attached 表示调试器程序已经和正在运行的 Nodejs 程序关联起来了。
![](http://upload-images.jianshu.io/upload_images/6693922-cbbd2d6a23b99f7a.png?imageMogr2/auto-orient/strip|imageView2/2/w/607/format/webp)
图3
此时在 Vscode 中的源码里打个断点,在浏览器中访问 localhost:3000 可以看到进入断点了。
![](http://upload-images.jianshu.io/upload_images/6693922-cb1eaf88d4900a1a.png?imageMogr2/auto-orient/strip|imageView2/2/w/490/format/webp)
图4
调试 nodemon 代码
还是