NodeJS 如何解决运行NestJS服务器的Vagrant VM在命中端点时返回ECONNREFUSED错误的问题?

gkl3eglg  于 2023-06-29  发布在  Node.js
关注(0)|答案(1)|浏览(122)

我通过vagrant设置了几个虚拟机,每个虚拟机都有自己的专用网络IP。出现的问题是,对于其中一个虚拟机,我命名为netcap_backend,我设置为启动nestjs服务器,但当我尝试访问主机上的端点时,它返回ECONNREFUSED。我有一个简单的GET端点直接设置在192.168.56.101:3000/。我的主机正在运行Arch,这是该特定VM的配置:

config.vm.define "netcap_backend" do |back|
    back.vm.hostname = "netcap-backend"
    
    back.vm.provider :virtualbox do |vb|
      vb.customize ["modifyvm", :id, "--memory", env['MEM_BACKEND']] 
      vb.customize ["modifyvm", :id, "--cpus", env['CPU_BACKEND']]
    end
  
    back.vm.network "private_network", ip: env['BACKEND_IP'] # 192.165.56.101
    back.vm.provision "ScriptRunAsVagrantUser", privileged: false, type:"shell", path: "#{env['PROVISION_PATH']}/prov_netcap_back.sh"

  end

下面是我在nest服务器中的main.ts:

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  app.enableCors({
    allowedHeaders: '*',
    origin: '*',
    credentials: true,
  });

  await app.listen(3000);
}
bootstrap();

奇怪的是,它的配置与我的前端虚拟机相同,并且正在运行一个React,我的主机连接到它没有问题,即使它使用不同的IP。
起初,当我在firefox上尝试一个简单的fetch时,我希望fetch调用返回一个简单的Hello World,但是,它返回了一个CORS问题,因此在我的main.ts中额外调用了enableCors()。但这似乎并没有解决问题。然后我用 Postman ping我的路线,这是当我看到ECONREFUSED。然后,我尝试看看我的主机是否可以与VM对话,它可以像ping 192.168.56.101一样执行得很好,没有网络错误。
一个小更新:尝试了相同的设置,但在windows上,工作完美.

62lalag4

62lalag41#

这里发生的错误是,虽然我的前端和后端服务器都使用不同的IP,但它们具有重叠的端口(都使用3000)。至少在我的系统上,这导致只有一个服务器连接到了仅主机网络。解决方案是为每个需要暴露给网络的服务器使用不同的端口号,并重新启动运行该服务器的每个vagrant vm。

相关问题