提问人:owen 提问时间:10/12/2023 最后编辑:tadmanowen 更新时间:10/12/2023 访问量:44
如何在本地 (LAN) 广播我的 Node JS 应用程序
How do I broadcast my Node JS app locally (LAN)
问:
我正在我的 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网络配置中找不到选项
我安装了 pm2 和 nginx,但在我可以解锁此端口/在我的 LAN 上解锁所有端口之前,它们不一定能帮助我解决这个问题。
先谢谢你!
答:
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
有趣的是,您的代码确实正确绑定,如我看到的那样:这意味着它正在侦听所有 () 地址。至于为什么另一台机器无法连接,试着用甚至.同样值得检查的是,您首先可以连接,并且您使用的是机器的本地地址,而不是外部“互联网”IP。TCP *:8080 (LISTEN)
*
nmap
telnet
ping
评论