首页 > 技术文章 > Nodejs 调试代码二

deng-jie 2020-04-16 13:12 原文

转载: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 服务。

 
图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)。
 
图2

我的机器上起了好几个 Nodejs 程序,跑 express-demo 的是第二个 Nodejs 程序,点击之后再看看终端,会打印一些新的消息,其中 Debugger attached 表示调试器程序已经和正在运行的 Nodejs 程序关联起来了。

 
图3

此时在 Vscode 中的源码里打个断点,在浏览器中访问 localhost:3000 可以看到进入断点了。

 
图4

调试 nodemon 代码

还是

推荐阅读