断点不触发需先确认请求是否进入路由:检查中间件日志、body解析错误、提前响应终结、代理配置误设;确保launch.json的program指向可执行js文件,typescript项目用dist输出或ts-node,esm项目注意node版本;避免nodemon路径问题,推荐attach模式;错开调试与开发端口,设置port环境变量并代码中动态读取。

断点不触发?先确认请求真进到了路由里
Express/Koa 里设了断点却从不停,大概率不是调试器坏了,是请求压根没走到那行代码。比如 app.use(express.json()) 因 body 太大或格式错误直接抛错,后续所有路由都不会执行;又或者中间件里写了 return res.status(401).end() 提前终结了响应链。
实操建议:
根据 package.json 中的 engines 字段自动检测 Node.js 版本需求,未安装 nvm 时自动安装并切换至对应版本。支持 Windows、macOS、Linux。适用于 Node.js 项目开发、版本切换和环境配置。
- 在第一个中间件(比如日志中间件)或
app.use((req, res, next) => { ... }) - 用
curl -v http://localhost:3000/api/users 或 Postman 发请求,看终端是否打印出中间件日志;没日志就说明请求连入口都没进 - 检查 Express 的
app.set('trust proxy', true)是否误配,导致req.ip解析失败、后续鉴权中间件直接 return
launch.json 的 program 必须指向可执行的 .js 文件
VSCode 不会编译 TypeScript,也不理解 import 语法,program 字段只能填能被 node 直接运行的文件路径。写成 "${workspaceFolder}/src/server.ts" 或 "${workspaceFolder}/index.mjs" 都会失败。
实操建议:
- TypeScript 项目:编译后调试 →
program填"${workspaceFolder}/dist/server.js",并确保tsconfig.json中"sourceMap": true和"outDir": "./dist"已启用 - TypeScript 项目:想直接调试源码 → 改用
runtimeExecutable: "npx"+runtimeArgs: ["ts-node", "--project", "./tsconfig.json"],再把args设为["./src/server.ts"] - ESM 项目(
package.json含"type": "module"):program可以是.mjs,但必须确保 Node 版本 ≥ 18.17,且 launch.json 中不要手动加--loader参数,避免和 VSCode 自动注入的--inspect冲突
用 nodemon 热重载时,别让 VSCode 直接跑 nodemon
很多人把 runtimeExecutable 设成 "nodemon" 或 "${workspaceFolder}/node_modules/.bin/nodemon",结果在 Windows 报 spawn nodemon ENOENT,在 macOS/Linux 找不到命令——这是因为 VSCode 启动时的 PATH 和你终端不一致。
实操建议:
- 推荐用
attach模式:先在终端运行npm run debug(脚本内容为nodemon --inspect-brk ./src/server.js),等看到Debugger listening on ws://127.0.0.1:9229/后,再在 VSCode 里启动一个request: "attach"的配置 -
attach配置关键字段:"port": 9229(必须和 nodemon 启动时指定的一致)、"restart": true(自动重连新进程)、删掉program字段 - 如果坚持用
launch模式,runtimeExecutable应设为"${workspaceFolder}/node_modules/.bin/nodemon"(注意路径中不能有空格),runtimeArgs设为["--inspect-brk", "${workspaceFolder}/src/server.js"],且不要额外加--inspect
端口冲突和环境变量最容易被忽略
本地常驻一个 npm run dev 进程,再按 F5 调试,两个服务都试图监听 3000,后者会启动失败或断点不触发——但控制台可能只显示 “server listening on 3000”,并不报错。
实操建议:
- 强制调试端口错开:
env里加"PORT": "3001",同时确保你的 Express/Koa 代码里是app.listen(process.env.PORT || 3000) - Express 默认不读
NODE_ENV=development下的某些行为(比如模板缓存),但在调试时加上这个变量能避免因环境差异导致逻辑跳变 - Windows 用户若遇到
command not found: node,不是插件问题,是 VSCode 没加载 shell 配置;退出所有 VSCode 进程,改用终端执行code .启动,才能继承当前 shell 的 PATH










