Node.js connect仅适用于localhost

sch*_*haz 41 connect node.js

我编写了一个小型node.js应用程序,使用Connect,提供网页,然后定期发送更新.它还接受用户观察并将其记录到磁盘文件中.

只要我在localhost上它就可以正常运行,但是我无法让同一个内部网上的其他计算机看到它.我使用的是端口3000,但更改为端口8080或80没有帮助.

这是我用来建立连接的代码:

    
var io = require('socket.io'),
  connect = require('connect');

var app = connect().use(connect.static('public')).listen(3000);
var chat_room = io.listen(app);
Run Code Online (Sandbox Code Playgroud)

如上所述,我尝试将端口号更改为8080或80,并没有看到任何差异,所以我不认为这是防火墙问题(但我可能是错的).在阅读了与HTTP相关的类似问题之后,我还想到将1.0.0.0添加到listen()但是看起来listen()似乎不接受IP掩码参数.

Pet*_*ons 91

很可能你的服务器套接字绑定到环回IP地址127.0.0.1而不是"所有IP地址"符号IP 0.0.0.0(注意这不是网络掩码).要确认这一点,请运行sudo netstat -ntlp(如果您使用的是Linux)或netstat -an -f inet -p tcp | grep LISTEN(OSX)并检查您的进程绑定到哪个IP(查找带有":3000"的行).如果你看到"127.0.0.1",那就是问题所在.通过将"0.0.0.0"传递给listen调用来修复它:

var app = connect().use(connect.static('public')).listen(3000, "0.0.0.0");
Run Code Online (Sandbox Code Playgroud)


arc*_*don 67

要获得其他用户访问本地计算机的权限,我通常使用ngrok.Ngrok将您的localhost暴露给Web,并且具有一个易于安装和启动的NPM包装器:

$ npm install ngrok -g
$ ngrok http 3000
Run Code Online (Sandbox Code Playgroud)

请参阅此示例用法:

在此输入图像描述

在上面的示例中,本地运行的sails:localhost:3000实例现在可以在Internet上获得,网址为:http://69f8f0ee.ngrok.iohttps://69f8f0ee.ngrok.io

  • 请注意,此解决方案不可靠,因为每次您停止ngrok服务时,转发链接都会更改。 (2认同)

小智 6

绑定到0.0.0.0是一半的战斗.有一个阻止TCP端口的IP防火墙(与系统首选项中的防火墙不同).因此,端口必须通过以下方式解除阻塞:

sudo ipfw add <PORT NUMBER> allow tcp from any to any
Run Code Online (Sandbox Code Playgroud)

  • sudo ipfw add allow tcp from any to any 3000 (3认同)

ake*_*lec 6

对于这个问题,我有一个非常简单的解决方案:process.argv给你一个传递给 node app 的参数列表。所以如果你运行:

node server.js 0.0.0.0
Run Code Online (Sandbox Code Playgroud)

你会得到:

process.argv[0] //=> "node"
process.argv[1] //=> "server.js"
process.argv[2] //=> "0.0.0.0"
Run Code Online (Sandbox Code Playgroud)

因此,您可以使用process.argv[2]将其指定为要侦听的 IP 地址:

http.listen(3000, process.argv[2]);
Run Code Online (Sandbox Code Playgroud)

现在,您的应用正在侦听“所有”IP 地址,例如http://192.168.1.4:3000/your_app

我希望这会帮助某人!


小智 5

在您的应用上,使其可以从网络中的任何设备访问:

app.listen(3000, "0.0.0.0");
Run Code Online (Sandbox Code Playgroud)

对于Azure,GCP和AWS中的NodeJS

对于在资源管理器中部署的Azure vm,请检查您的虚拟网络安全组并打开端口或端口范围以使其可访问,否则,如果在旧版本的azure中部署了vm,请在您的云端点中。

只需为GCP和AWS寻找与之相当的产品