nodejs v5.10.1无法再获取我的主机地址?

时间:2016-04-14 02:45:51

标签: linux node.js express

为什么最新版本的nodejs(v5.10.1)无法再获取我的主机地址?

快递代码:

var express = require('express');
var app = express();

// respond with "Hello World!" on the homepage
app.get('/', function (req, res) {
    res.send('Hello World!');
});

var server = app.listen(3000, function () {
    var host = server.address().address;
    var port = server.address().port;

    console.log(server.address());

    console.log('Example app listening at http://%s:%s', host, port);
});

结果:

{ address: '::', family: 'IPv6', port: 3000 }
Example app listening at http://:::3000

应该是:

http://127.0.0.1

我有什么想法可以解决这个问题吗?

我在Linux上。

2 个答案:

答案 0 :(得分:1)

实际上,也许你会看到像

这样的东西

:80

然后

:: 80

实际上这个模式有这样的模式:

主机:端口 IPv4

host :: port IPv6

127.0.0.1:80表示使用IPv4,在端口80中侦听127.0.0.1

:80表示使用IPv4,侦听端口80中的所有地址

127.0.0.1::80表示使用IPv6,在端口80中侦听127.0.0.1

等等。

所以,:: 3000意味着在端口3000中监听IPv6

这些配置是在这些变量

下完成的
var host = server.address().address;
var port = server.address().port;

您可以将这些变量的值更改为“127.0.0.1”和“80”并查看会发生什么,但很可能您的计算机仍然在那里使用IPv6,如果您想要为您的计算机更改为IPv4,请更改在以下位置设置您的机器:

Windows :控制面板 - >网络和共享中心 - > (您的网络) - >属性 - >设置IPv4

Linux :我没有linux机器来测试这个,但语法应该是使用ifconfig或ipconfig取决于你的linux,请参考类似https://unix.stackexchange.com/questions/34093/static-ipv4-ipv6-configuration-on-centos-6-2

的内容

Mac :我也没有mac机,应该和linux一样,所以也尝试做同样的事情

答案 1 :(得分:0)

我有同样的问题,我像数组一样解决了这个问题:

server.address()[“端口”]

这里有个例子:

export const onError = (server: Server) => {
    console.log(server.address()["port"])
    return (error: NodeJS.ErrnoException): void => {
        let port: number | string = server.address()["port"];
        if (error.syscall !== 'listen') throw error;
        let bind = (typeof port === 'string') ? `pipe ${port}` : `port ${port}`;
        switch(error.code) {
            case 'EACCES': 
                console.error(`${bind} requires elevated privileges`);
                process.exit(1);  
                break;
            case 'EADDRINUSE':
                console.error(`${bind} is already in use`);
                process.exit(1);
                break;
            default:
                throw error;
        }
    }
}