在本地网络上的其他人如何在我的机器上运行时访问我的NodeJS应用程序?

the*_*ham 41 javascript networking node.js

我有一个非常直截了当的问题.我用NodeJS做了一个网页游戏,我可以自己成功地玩多个浏览器窗口并排打开它; 但是,我想知道其他本地机器是否可以与我一起访问和玩游戏.

我天真地尝试使用这个网址:my-ip-address:8000它将无法正常工作.

Bil*_*oon 51

您的node.js服务器通常在脚本末尾确定的端口上运行.有时3000.但可以是任何东西.其他人访问的正确方法就像你说的那样......

http://your.network.ip.address:port / 例如 http://192.168.0.3:3000

检查你有正确的端口 - 和网络上的IP地址 - 而不是互联网IP.

否则,路由器可能阻止了端口.尝试使用8080或80来解决此问题 - 否则重新配置您的路由器.

  • @Gisborne - 你试过这个 - 事实上,你有没有回家?我们都在这里等待一口气! (7认同)
  • 我将端口切换到 8000,但我可能使用了我的互联网 IP,而不是网络的 IP。当我回家并报告任何情况时,我会尝试这个。 (2认同)
  • 您还应该进入您的路由器并允许您的 ip,`192.168.0.3` 能够转发端口 `8000`,这样当您的客户端连接到您的本地 ip 时,路由器将允许它们抛出。 (2认同)
  • @RobertPitt端口转发通常只是从外部世界到本地网络.同一本地网络中的计算机在默认(和最常见)路由器配置中没有限制. (2认同)

小智 25

我有同样的问题并解决了问题.就我而言,Windows防火墙(而不是路由器)阻止了主机上的V8机器I/O.

  1. 转到Windows按钮
  2. 搜索"防火墙"
  3. 选择"允许程序通过防火墙进行通信"
  4. 单击更改设置
  5. 勾选所有"V8 Javascript的Evented I/O"或"Node.js:服务器端Javascript"

我的猜测是"V8 Javascript的Evented I/O"是node.js与外界通信的I/O进程,我们需要先将其释放,然后再将数据包发送到本地计算机之外.启用此程序以通过Windows防火墙进行通信后,我可以使用任何端口号进行侦听.

  • 有趣的是,“ Evented I / O for V8 Javascript”指定的应用程序是Adobe的Brackets编辑器添加的Node的独立版本。如果您不使用方括号,则最好不要使用此应用。如果您是从命令行或其他IDE(例如Webstorm)运行Node,则此处要查找的应用是“ Node.js:服务器端JavaScript” (2认同)
  • 只是想补充一点,在我的例子中,“Node.js:服务器端 JavaScript”最初并未在应用程序列表中列出。我必须选择“允许另一个应用程序...”并明确选择nodejs.exe (2认同)

Ali*_*lif 19

如果您使用路由器,那么:

  1. 替换server.listen(yourport, 'localhost');server.listen(yourport, 'your ipv4 address');

    在我的机器上

    server.listen(3000, '192.168.0.3');
    
    Run Code Online (Sandbox Code Playgroud)
  2. 确保您的端口转发到您的ipv4地址.

  3. 在Windows防火墙上,勾选Node.js上的所有内容:服务器端JavaScript.

  • 这个问题甚至不是我想要的,但你帮助我弄清楚人们如何在我的《我的世界》服务器上玩哈哈(我刚刚使用我的计算机热点将其交给了 ppl) (2认同)

Geo*_*V L 13

在我的Angular Node Server(v6.10.3)中遇到类似问题,它在WIndows 10中设置. http://localhost:4201在localhost中运行良好.但 http://{ipaddress}:4201不能在本地网络的其他机器上工作.

为此我更新了ng serve这个

//Older ng serve in windows command Prompt

ng serve --host localhost --port 4201

//Updated ng serve
//ng serve --host {ipaddress} --port {portno}
ng serve --host 192.168.1.104 --port 4201
Run Code Online (Sandbox Code Playgroud)

执行此修改后,能够在网络bt中的其他计算机上访问我的应用程序,调用此URL

http://192.168.1.104:4201  
//http://{ipaddress}:4201
Run Code Online (Sandbox Code Playgroud)


小智 9

没有人提到的一个技巧是记住将应用程序托管在可通过LAN访问的地址0.0.0.0上,而不是默认的本地主机上。与默认的localhost地址(172.0.0.1)相比,Mac和Linux上的防火墙对此地址的要求不严格。

例如,

gatsby develop --host 0.0.0.0

yarn start --host 0.0.0.0

npm start --host 0.0.0.0

然后,您可以通过输入ifconfigipconfig在终端中访问要连接的地址。然后尝试左边不以.255或结尾的IP地址之一.0


ali*_*ard 5

该端口可能已被您的本地防火墙或路由器阻止。没有细节很难说。

但是有一个简单的解决方案,您不必为防火墙规则弄乱,也可以将节点作为特权进程运行以在端口80上服务,等等。

查看Localtunnel。它是一个很棒的Ruby脚本/服务,可让您在几秒钟内使Internet上的任何本地端口可用。对于生产设置来说,这当然不是有用的,但是要与同事一起尝试一款游戏,就可以了!

  • Ngrok.com现在是要走的路。 (3认同)

小智 5

const express = require('express');

var app = express();    
app.listen(Port Number, "Your IP Address");
// e.g.
app.listen(3000, "192.183.190.3");
Run Code Online (Sandbox Code Playgroud)

ipconfig如果您的 Windows 用户可以使用,您可以通过输入cmd来获取您的 IP 地址ifconfig