Node.JS .listen(port, 'hostname') 不起作用
Node.JS .listen(port, 'hostname') does not work
目前我尝试启动 node.js 服务器,我确实想了解 server.listen 的论点。
server.listen(port, hostname, backlog, callback);
问题:据我了解,2. 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)
hostname
参数用于服务器具有多个网络接口的情况,而您只希望服务器侦听其中一个接口(与默认情况相反,即侦听所有接口)。
例如,如果您希望服务器只能由服务器本身的客户端 运行 访问,您可以让它在 IP 地址为“127.0.0.1”的环回网络接口上侦听或主机名 "localhost":
server.listen(7000, "localhost")
server.listen(7000, "127.0.0.1")
这并不意味着您只需输入任何主机名就可以神奇地获得通过该主机名访问服务器的能力,这不是它的工作方式或目的。
您不能提供任何随机字符串作为主机参数。服务器尝试将自己绑定到提供的主机名。所以您的主机名应该是您的 ip 或 dns 可访问的主机名。
如果省略主机,当 IPv6 可用时,服务器将接受未指定的 IPv6 地址 (::) 上的连接,否则接受未指定的 IPv4 地址 (0.0.0.0) 上的连接。
我遇到了类似的问题,因为路由器或代理修改了请求的主机名...结果是内部网和外部网客户端有 2 个不同的名称。
我的解决方案是将主机名设置为空白
server.listen(7000, "")
目前我尝试启动 node.js 服务器,我确实想了解 server.listen 的论点。
server.listen(port, hostname, backlog, callback);
问题:据我了解,2. 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)
hostname
参数用于服务器具有多个网络接口的情况,而您只希望服务器侦听其中一个接口(与默认情况相反,即侦听所有接口)。
例如,如果您希望服务器只能由服务器本身的客户端 运行 访问,您可以让它在 IP 地址为“127.0.0.1”的环回网络接口上侦听或主机名 "localhost":
server.listen(7000, "localhost")
server.listen(7000, "127.0.0.1")
这并不意味着您只需输入任何主机名就可以神奇地获得通过该主机名访问服务器的能力,这不是它的工作方式或目的。
您不能提供任何随机字符串作为主机参数。服务器尝试将自己绑定到提供的主机名。所以您的主机名应该是您的 ip 或 dns 可访问的主机名。
如果省略主机,当 IPv6 可用时,服务器将接受未指定的 IPv6 地址 (::) 上的连接,否则接受未指定的 IPv4 地址 (0.0.0.0) 上的连接。
我遇到了类似的问题,因为路由器或代理修改了请求的主机名...结果是内部网和外部网客户端有 2 个不同的名称。
我的解决方案是将主机名设置为空白
server.listen(7000, "")