【问题标题】:Cannot run my Node.Js app with my machine's IP address, but can with localhost无法使用我机器的 IP 地址运行我的 Node.Js 应用程序,但可以使用 localhost
【发布时间】:2017-03-02 17:09:33
【问题描述】:

所以我设置了一个节点 js 应用程序来监听我机器的 5050 端口:

所以当我转到http://localhost:5050/myapp 时,我的应用程序加载正常。我使用的是 express 框架,因此我的监听框架如下:

var server = app.listen(5050, '0.0.0.0', function () {
    console.log("App started on port 5050")
});

我还做了一个 netstat(我使用的是 Windows 10 机器),并且没有回送本地 IP 地址。

但是,当我执行我的机器 ip 例如。 http://192.168.0.231:5050/myapp 我不断收到:无法访问此网站

编辑:我不认为我说得很清楚

我关闭了防火墙,我尝试过没有在 app.listen 中指定 IP 地址。我不认为这是代码的问题,因为当我尝试使用一些简单的测试应用程序并尝试使用我的 IP 地址运行时,这也会超时

【问题讨论】:

  • 你确定不是168 而不是186
  • 也许您的本地子网不会路由到您;这取决于您的网络配置。
  • 抱歉,这是一个错字
  • 检查以确保 IP 与 Pointy 的答案一样正确,而且 Express 不需要您定义地址。您可以将端口和回调传递给监听函数。
  • 您是否尝试过从同一本地网络上的另一台计算机访问该地址?

标签: javascript node.js express


【解决方案1】:

试试不带ip参数的listen

var server = app.listen(5050, function () {
   console.log("App started on port 5050")
});  

【讨论】:

  • 我试过不指定IP地址,还是出现同样的问题
  • 您尝试更改端口吗? (80-8080-...)
  • 防火墙是否开启?
  • 我不认为这是代码的问题,当我指定本地主机时,我可以正常运行代码。另外,假设我要为节点 js 运行另一个测试应用程序,它也适用于本地方法,但只要我指定和实际 ip,它就会超时。
【解决方案2】:

在运行 nodejs 应用程序时,我也遇到了与您提到的相同的问题。在我的代码看起来像这样之前。

var express = require('express');
var app = express();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var mongoChat = require('./app/mongo_chat');

var ip = "127.0.0.1";
var port = 3000;
var users = {};
var WhisperChek = false;
var storage=[];
app.use(express.static(__dirname + '/public'));
app.get('/', function (req, res) {
    res.sendfile('index.html');
});
//socket connection
    io.on('connection', function (socket) {
        //console.log('Someone connected!');
        mongoChat.mognolizer(io,socket, users, WhisperChek);
        function updateNicknames() {
            io.emit('nickname', Object.keys(users));
        }
//disconnect socket
        socket.on('disconnect', function (data) {
            if (!socket.Username)return;
            delete users[socket.Username];
            updateNicknames();
        });
    });
http.listen(port,ip, function () {
    console.log('listening on *:3000');
});

但是,我从代码中删除了var ip="127.0.0.1",并将监听函数更新为:

http.listen(port, function () {
        console.log('listening on *:3000');
    });

现在,我的应用程序既在本地主机上运行,​​即localhost:3000,也运行在我的 IP 地址上,即ipaddress:3000。问题是当我们将 ip 指定为127.0.0.1 时,它只能在 localhost 上运行,因为我们使用的 ipaddress 是私有的,并且它会随着网络连接的变化而变化。检查一次它是否适合您。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-04
    • 2017-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多