我编写了一个小型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.io或https://69f8f0ee.ngrok.io
小智 6
绑定到0.0.0.0是一半的战斗.有一个阻止TCP端口的IP防火墙(与系统首选项中的防火墙不同).因此,端口必须通过以下方式解除阻塞:
sudo ipfw add <PORT NUMBER> allow tcp from any to any
Run Code Online (Sandbox Code Playgroud)
对于这个问题,我有一个非常简单的解决方案: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寻找与之相当的产品
归档时间: |
|
查看次数: |
88879 次 |
最近记录: |