【问题标题】:Nodejs Server HostnameNodejs 服务器主机名
【发布时间】:2012-09-15 17:42:19
【问题描述】:

好的,所以在 Node.js 中获取向我的服务器发出的请求的主机名似乎很容易:

app.get('/', function(req,res){
    console.log(req.headers.host);
});

有没有一种简单的方法可以确定我的实际 http 服务器的主机名?例如,我的服务器在地址 http://localhost:3000 上运行 - 我可以通过编程方式确定该地址吗?我正在使用 expressjs。

【问题讨论】:

    标签: http node.js express


    【解决方案1】:

    是的,您可以使用;

    var express = require('express'),
        app = express(),
        server  = require('http').createServer(app);
    
    server.listen(3000, function(err) {
            console.log(err, server.address());
    });
    

    应该打印

    { address: '0.0.0.0', family: 'IPv4', port: 3000 }
    

    您还可以通过以下方式检索操作系统的主机名;

    require('os').hostname();
    

    【讨论】:

    • 太好了,感谢您的回复和帮助!如果我在终端中执行“host localhost”,我会得到响应“localhost has address 127.0.0.1”,但 server.address() 会产生“0.0.0.0”。有差异的原因吗?
    • 我不知道为什么它会解析为 0.0.0.0,我在尝试使用 address() 方法来监听绑定的 tcp 套接字时遇到问题,因为 windows 会为 0.0 触发错误.0.0 ip 地址,我不得不将 0.0.0.0 映射到 127.0.0.1 0.0.0.0 发生的原因有很多,它可能意味着机器上的所有接口,也可能意味着没有 ip 与机器关联以及我对它所做的简短研究中还有其他一些事情。
    • localhost 对我来说是{ address: '::', family: 'IPv6', port: 5000 }
    • @ptf 我刚刚发现了同样的情况,如果这种情况只发生在localhost,你知道吗?
    • 差异是因为服务器正在侦听0.0.0.0,这是“侦听每个可用地址”的 IPv4 版本。因此,服务器实际上正在侦听机器拥有的每个地址上的该端口。您可以通过127.0.0.1 连接到它,但它不会报告这一点,因为您也可以通过机器拥有的任何其他 IP 地址连接到它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-24
    • 2015-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-24
    • 2021-10-07
    相关资源
    最近更新 更多