Node.JS .listen (порт, 'имя хоста') не работает - PullRequest
0 голосов
/ 03 декабря 2018

в данный момент я пытаюсь раскрутить сервер node.js и хочу понять аргументы server.listen.

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

Вопрос: насколько я понимаю, это аргумент 2.прослушивания должно быть именем хоста.В результате я могу получить доступ к серверу через «hostname: 7000», но в результате происходит сбой сценария.Без "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)

Ответы [ 3 ]

0 голосов
/ 03 декабря 2018

Вам не разрешено указывать произвольную строку в качестве аргумента хоста.Сервер пытается привязать себя к предоставленному имени хоста.Таким образом, ваше имя хоста должно быть вашим IP или доступным именем хоста от DNS.

Если хост не указан, сервер будет принимать соединения по неуказанному IPv6-адресу (: :), если IPv6 доступен, или по неуказанному IPv4-адресу (0.0.0.0) в противном случае.

0 голосов
/ 05 апреля 2019

У меня была похожая проблема, поскольку маршрутизатор или прокси-сервер изменили имя хоста запроса ... В результате было получено 2 разных имени для клиентов интрасети и экстрасети.

Мое решение состояло в том, чтобы установить пустое имя хоста

server.listen(7000, "")

0 голосов
/ 03 декабря 2018

Аргумент hostname используется в ситуациях, когда сервер имеет более одного сетевого интерфейса, и вы хотите, чтобы сервер прослушивал только один из этих интерфейсов (в отличие от значения по умолчанию, то есть для прослушивания ).все интерфейсы).

Например, если вы хотите, чтобы сервер был доступен только клиентам, работающим на самом сервере, вы должны прослушивать его через петлевой сетевой интерфейс, имеющий IP-адрес "127.0.0.1 "или имя хоста" localhost ":

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

Это не значит, что вы можете просто ввести любое имя хоста и волшебным образом получить возможность доступа к серверу через это имя хоста, это не то, как он работает или чтопредназначен для.

...