Node.JS的.listen(port, 'hostname')无法工作

3

目前我正在尝试启动一个Node.js服务器,我想理解server.listen的参数。

server.listen(port, hostname, backlog, callback);

问题:据我所了解,listen的第二个参数应该是主机名。结果应该是我能够通过“hostname:7000”访问服务器,但结果是脚本崩溃了。如果没有“hostname”,一切都正常工作。这里的问题是什么?“hostname”的用法是什么?

const server = http.createServer(function (req, res) {    
console.log(req); 

}); 

server.listen(7000, "bla");

浏览器:

bla:7000

无法工作。

错误:

Error: listen EADDRNOTAVAIL 22.0.0.0:7000
at Object.exports._errnoException (util.js:1022:11)
at exports._exceptionWithHostPort (util.js:1045:20)
at Server._listen2 (net.js:1246:19)
at listen (net.js:1295:10)
at net.js:1405:9
at _combinedTickCallback (internal/process/next_tick.js:77:11)
at process._tickCallback (internal/process/next_tick.js:98:9)
at Module.runMain (module.js:606:11)
at run (bootstrap_node.js:394:7)
at startup (bootstrap_node.js:149:9)

2
哦,你的电脑名字是bla吗?如果不是,你就不能这样绑定。 - GottZ
3个回答

5
< p > hostname 参数在服务器具有多个网络接口并且您只想使服务器侦听其中一个接口(而不是默认值,即侦听 所有 接口)的情况下使用。

例如,如果您希望仅由在服务器本身上运行的客户端访问服务器,则可以使其侦听回送网络接口,该接口具有 IP 地址“127.0.0.1”或主机名“localhost”:

server.listen(7000, "localhost")
server.listen(7000, "127.0.0.1")

这并不意味着你只需输入任何主机名就可以通过该主机名神奇地访问服务器,这不是它的工作方式或目的。


1

您不能将任意字符串作为主机参数提供。服务器尝试绑定到提供的主机名。因此,您的主机名应该是您的IP地址或DNS中可访问的主机名。

如果省略主机名,则当IPv6可用时,服务器将接受未指定的IPv6地址(::),否则接受未指定的IPv4地址(0.0.0.0)。


在IPv6可用时,使用未指定的IPv6地址(::),否则使用未指定的IPv4地址(0.0.0.0)。这是一个与程序相关的内容,意思是在启用IPv6时,将使用未指定的IPv6地址作为默认值;而在不启用IPv6时,将使用未指定的IPv4地址作为默认值。 - nCardot

0

我曾经遇到过类似的问题,因为路由器或代理修改了请求的主机名... 结果是内部网络和外部网络客户端有两个不同的名称。

我的解决方案是将主机名设置为空白

server.listen(7000, "")


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