如何在VSCode中配置Node环境运行NestJS微服务框架

冬杰君_7393

冬杰君_7393

2026-07-08

316人浏览

原创

nestjs微服务必须通过--inspect+attach模式调试,因launch模式无法处理其非http启动特性;需在main.ts中显式调用createmicroservice()和await microservice.listen(),并确保sourcemap、outfiles路径及端口配置正确。

如何在vscode中配置node环境运行nestjs微服务框架

直接说结论:NestJS 微服务不能靠 npm run start 或默认 launch.json 的 program 字段启动调试——它必须走 --inspect + attach 模式,且微服务入口(如 main.ts)里得显式调用 createMicroservice()。

为什么 NestJS 微服务在 VSCode 里断点不生效

普通 HTTP 服务调试时,VSCode 可以用 launch 模式直接运行 dist/main.js;但微服务(TCP、Redis、Kafka 等)启动后不监听 HTTP 端口,node --inspect 启动后若没立刻进入事件循环(比如卡在连接 broker 或等待注册),VSCode 的调试器会超时断连。更常见的是:你写了 app.listen() 却漏掉 microservice.listen(),进程根本没真正“跑起来”,断点自然不触发。

  • 微服务模块未被 @Module 的 imports 引入,NestApplication 根本不加载它
  • main.ts 里只调用了 app.init(),没调 microservice.listen() 或 await microservice.listen()
  • 使用 nest start --debug 但没指定端口,或端口被占用导致 --inspect 绑定失败
  • tsconfig.json 中 "sourceMap": true 缺失,或 outDir 和 launch.json 中的 outFiles 路径不一致

正确的 launch.json 配置(attach 模式)

不要用 launch 模式去“启动”微服务进程——改用 attach,让 VSCode 去连接已启动的、带 --inspect 的 Node 进程。这是最稳的方式。

  • type 必须是 node,不是 pwa-node(旧版插件兼容性差)
  • request 设为 attach,不是 launch
  • port 要和启动命令里的 --inspect=9229 完全一致(默认是 9229)
  • outFiles 写成 ["${workspaceFolder}/dist/**/*.js"],不能漏掉 **,否则子目录下的 microservices/*.js 找不到源码映射
  • sourceMaps 设为 true,且确保 tsconfig.json 里有 "sourceMap": true, "outDir": "dist"

示例 launch.json 片段:

Wjs Uploading Video
Wjs Uploading Video

将一个或多个视频上传至YouTube。当用户想“上传到YouTube”“发YouTube”“批量上传”“upload to YouTube”“post videos to YouTube”或发布到YouTube时使用此技能。

下载
{
  "type": "node",
  "request": "attach",
  "name": "Attach to Microservice",
  "port": 9229,
  "outFiles": ["${workspaceFolder}/dist/**/*.js"],
  "sourceMaps": true,
  "skipFiles": ["<node_internals>/**"]
}</node_internals>

启动微服务的 npm script 必须带 --inspect

不能只写 nest start 或 node dist/main.js——必须显式加 --inspect 参数,并保证端口开放、不被复用冲突。

  • 推荐脚本:"start:debug": "node --inspect=0.0.0.0:9229 dist/main.js"(注意是 dist/main.js,不是 src/main.ts)
  • 如果用 nest CLI,确保 package.json 里有 "start:debug": "nest start --debug 9229",且 nest 版本 ≥ 10.3.0(旧版不支持微服务调试)
  • Windows 用户若报 Cannot connect to runtime process,把 0.0.0.0 换成 127.0.0.1,或关掉防火墙临时测试
  • 启动前先 npm run build,确保 dist/ 下有编译后的微服务代码(比如 dist/microservices/tcp.service.js)

微服务入口 main.ts 的关键写法

很多断点不命中,根源不在配置,而在 main.ts 本身没真正“启动”微服务实例。

  • 必须显式创建微服务应用:const microservice = app.connectMicroservice(...)
  • 必须调用 await microservice.listen()(或 microservice.listen().then(...)),不能只声明不执行
  • 如果同时跑 HTTP + 微服务,要 await app.listen() 和 await microservice.listen() 都完成,否则进程可能提前退出
  • 检查 app.connectMicroservice() 的配置对象,比如 TCP 地址是否写错({ port: 3001 } 而不是 { host: 'localhost', port: 3001 })

典型正确结构:

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  // HTTP 服务(可选)
  await app.listen(3000);

  // 微服务必须 listen 才真正启动
  const microservice = app.connectMicroservice({
    transport: Transport.TCP,
    options: { port: 3001 },
  });
  await microservice.listen(); // ← 这行不能少
}
bootstrap();

微服务调试真正的难点不在配置文件,而在于确认进程确实在跑、事件循环已激活、且源码映射路径和编译输出完全对齐——漏掉任意一环,断点就只是灰色圆点。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

vscode node.js 微服务 js node

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

2023.06.20

4256

8

js获取当前时间
js获取当前时间

JS全称JavaScript,是一种具有函数优先的轻量级,解释型或即时编译型的编程语言;它是一种属于网络的高级脚本语言,主要用于Web,常用来为网页添加各式各样的动态功能。js怎么获取当前时间呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.28

1315

5

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.03

1718

5

js是什么意思
js是什么意思

JS是JavaScript的缩写,它是一种广泛应用于网页开发的脚本语言。JavaScript是一种解释性的、基于对象和事件驱动的编程语言,通常用于为网页增加交互性和动态性。它可以在网页上实现复杂的功能和效果,如表单验证、页面元素操作、动画效果、数据交互等。

2023.08.17

9803

11

js删除节点的方法
js删除节点的方法

js删除节点的方法有:1、removeChild()方法,用于从父节点中移除指定的子节点,它需要两个参数,第一个参数是要删除的子节点,第二个参数是父节点;2、parentNode.removeChild()方法,可以直接通过父节点调用来删除子节点;3、remove()方法,可以直接删除节点,而无需指定父节点;4、innerHTML属性,用于删除节点的内容。

2023.09.01

940

4

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.04

2604

5

Js中concat和push的区别
Js中concat和push的区别

Js中concat和push的区别:1、concat用于将两个或多个数组合并成一个新数组,并返回这个新数组,而push用于向数组的末尾添加一个或多个元素,并返回修改后的数组的新长度;2、concat不会修改原始数组,是创建新的数组,而push会修改原数组,将新元素添加到原数组的末尾等等。本专题为大家提供concat和push相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.14

1529

5

js截取字符串的方法介绍
js截取字符串的方法介绍

JavaScript字符串截取方法,包括substring、slice、substr、charAt和split方法。这些方法可以根据具体需求,灵活地截取字符串的不同部分。在实际开发中,根据具体情况选择合适的方法进行字符串截取,能够提高代码的效率和可读性 。

2023.09.21

4469

3

js生成随机数方法
js生成随机数方法

JavaScript生成随机数的方法,包括使用Math.random()方法生成指定范围内的随机整数、生成随机字符串和生成随机颜色。根据具体需求,可以选择适合的方法来生成随机数,以实现各种功能 。

2023.09.25

2575

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程