Nodejs服务器主机名

16

好的,那么在Node.js中似乎很容易获取发送请求的主机名:

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

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

1个回答

25

是的,你可以使用以下方式:

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();

1
我不确定为什么它会解析为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与机器关联,以及其他一些短时间内我所做的研究中的事情。 - Jason Brumwell
3
对我来说,“localhost” 表示为 { address: '::', family: 'IPv6', port: 5000 } - ptf
@ptf 我刚刚也发现了这个问题,你知道这只会在本地主机上发生吗? - Clemens Himmer
@ptf 真可惜我目前没有实时服务器.. 我会尽快解决的 :) - Clemens Himmer
1
差异是因为服务器正在侦听0.0.0.0,这是“侦听每个可用地址”的IPv4版本。 因此,服务器实际上正在侦听机器拥有的每个地址上的该端口。 您可以通过127.0.0.1连接到它,但它不会报告,因为您还可以通过机器拥有的任何其他IP地址连接到它。 - Jason Kohles
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接