目前,我试图拆分一个node.js服务器,并且我确实想了解server.listen的参数。
server.listen(port, hostname, backlog, callback);问:据我所知,听的第二个论点应该是主机名。结果应该是,我能够通过“主机名: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)发布于 2018-12-03 13:21:43
在服务器有多个网络接口的情况下使用hostname参数,您只希望服务器在其中一个接口上侦听(与默认情况相反,默认情况是侦听所有接口)。
例如,如果您希望服务器只能由运行在服务器上的客户端访问,则可以让它侦听具有IP地址"127.0.0.1“或主机名”localhost“的环回网络接口:
server.listen(7000, "localhost")
server.listen(7000, "127.0.0.1")这并不意味着您只需输入任何主机名就可以神奇地通过该主机名访问服务器,这不是它的工作方式,也不是它的目的。
发布于 2018-12-03 13:23:22
不允许将任何随机字符串作为主机参数。服务器试图将自己绑定到提供的主机名。因此,您的主机名应该是您的ip或可从dns访问的主机名。
如果省略了主机,当IPv6可用时,服务器将接受未指定的IPv6地址(::)上的连接,否则将接受未指定的IPv4地址(0.0.0.0)。
发布于 2019-04-05 14:13:50
我也遇到了类似的问题,因为路由器或代理修改了请求的主机名.结果,内部网和外部网客户端有两个不同的名称。
我的解决方案是将主机名设置为空白。
server.listen(7000, "")
https://stackoverflow.com/questions/53594612
复制相似问题