如何在本地 (LAN) 广播我的 Node JS 应用程序

How do I broadcast my Node JS app locally (LAN)

提问人:owen 提问时间:10/12/2023 最后编辑:tadmanowen 更新时间:10/12/2023 访问量:44

问:

我正在我的 Ubuntu 机器上运行一个节点 JS 应用程序并且它可以工作,我可以在该机器上访问 localhost:8080 并显示该应用程序。但是,网络上的任何其他计算机都无法访问它。

法典:

const portNumber = 8080
let app = express()

app.use(express.static(__dirname + '/public'))

app.get('/', function(req, res) { res.sendFile(__dirname + '/public/stocks.html') })

app.use(bodyParser.json())
app.use(bodyParser.urlencoded({extended: true}))

let httpServer = http.createServer(app)

httpServer.listen(portNumber, function(){ console.log('listening on port:: ' + portNumber) })

等。。。

我最初使用端口 4023,但切换到 8080。我还检查了我的网络诊断程序,以明确允许此应用程序,但在我的AT&T网络配置中找不到选项

AT&T防火墙配置页面

我安装了 pm2 和 nginx,但在我可以解锁此端口/在我的 LAN 上解锁所有端口之前,它们不一定能帮助我解决这个问题。

先谢谢你!

JavaScript 节点 .js 托管 局域网

评论

1赞 epascarello 10/12/2023
“但是,网络上的任何其他机器都无法访问它。那么您是否尝试通过机器 IP 从另一台机器访问它?
0赞 owen 10/13/2023
不,我正在尝试从 localhost 或 127.0.0.1 访问它。但我确实尝试过以防万一它会起作用,但没有运气,因为我相信这是意料之中的,对吧?

答:

0赞 tadman 10/12/2023 #1

您经常需要绑定 to 才能使机器外部的连接正常工作,如下所示:"0.0.0.0"

httpServer.listen(portNumber, "0.0.0.0", ...)

默认绑定仅指向 localhost,这对其他计算机没有用。

您的网络防火墙在这里无关紧要,它通常不会阻止内部流量。这取决于各个机器。

评论

0赞 owen 10/12/2023
刚刚试过这个,同样的问题
0赞 tadman 10/13/2023
值得使用这样的工具检查端口是否在正确的 IP 绑定上打开。lsof
0赞 owen 10/13/2023
好吧,我刚刚尝试了那个工具,但它吐出了一大堆我无法破译的台词。我确实看到很多“节点”进程/文件,但没有 IP 地址。有什么我应该特别寻找的吗?
0赞 tadman 10/13/2023
您可以使用 将其聚焦。更多例子在这里lsof -iTCP -sTCP:LISTEN -P -n | grep 8080
0赞 tadman 10/13/2023
有趣的是,您的代码确实正确绑定,如我看到的那样:这意味着它正在侦听所有 () 地址。至于为什么另一台机器无法连接,试着用甚至.同样值得检查的是,您首先可以连接,并且您使用的是机器的本地地址,而不是外部“互联网”IP。TCP *:8080 (LISTEN)*nmaptelnetping