【问题标题】:Node.JS .listen(port, 'hostname') does not workNode.JS .listen(port, 'hostname') 不起作用
【发布时间】:2019-05-04 19:08:49
【问题描述】:

目前我尝试启动 node.js 服务器,我确实想了解 server.listen 的参数。

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

问题:据我了解,listen 的 2. 参数应该是主机名。结果应该是,我可以通过“主机名:7000”访问服务器,但结果是,脚本崩溃了。没有“主机名”一切正常。这里有什么问题? “主机名”的用途是什么?

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)

【问题讨论】:

  • 哦,你的电脑叫bla?如果不是,你不能那样绑定。

标签: javascript node.js server hostname listen


【解决方案1】:

hostname 参数用于服务器具有多个网络接口的情况,并且您只希望服务器侦听其中一个接口(与默认设置相反,即侦听 所有接口)。

例如,如果您希望服务器只能由运行在服务器本身上的客户端访问,您可以让它侦听环回网络接口,该接口的 IP 地址为“127.0.0.1”或主机名“localhost”:

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

这并不意味着您可以输入任何主机名并神奇地获得通过该主机名访问服务器的能力,这不是它的工作原理或用途。

【讨论】:

    【解决方案2】:

    您不能将任何随机字符串作为主机参数。服务器尝试将自己绑定到提供的主机名。因此,您的主机名应该是您的 ip 或来自 dns 的可访问主机名。

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

    【讨论】:

    • "当 IPv6 可用时为未指定的 IPv6 地址 (::),否则为未指定的 IPv4 地址 (0.0.0.0)"这是什么意思?
    【解决方案3】:

    我遇到了类似的问题,因为路由器或代理修改了请求的主机名...结果是 Intranet 和 Extranet 客户端的 2 个不同的名称。

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

    server.listen(7000, "")

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-06
      • 2021-11-04
      • 1970-01-01
      • 1970-01-01
      • 2016-07-15
      • 2014-07-01
      • 2017-08-31
      • 2017-02-11
      相关资源
      最近更新 更多