Express ошибки сервера с внешним IP, в противном случае работает нормально - PullRequest
0 голосов
/ 21 января 2020

У меня есть сервер Express - на данный момент очень маленький, вот весь мой код:

const express = require('express');
const app = express();
const port = 8080

app.get('/', function(req, res) {
  res.send('Hey!')
})

app.listen(port, 'my.ip.address')

Он прекрасно работает, когда my.ip.address - localhost / 0.0.0.0 / 127.0.0.1 /192.168.0.28 (мой сетевой IP-адрес.) Но когда мой внешний IP-адрес предоставлен, я получаю следующее:

events.js:298
      throw er; // Unhandled 'error' event
      ^

Error: listen EADDRNOTAVAIL: address not available myip:8080
    at Server.setupListenHandle [as _listen2] (net.js:1292:21)
    at listenInCluster (net.js:1357:12)
    at doListen (net.js:1496:7)
    at processTicksAndRejections (internal/process/task_queues.js:85:21)
Emitted 'error' event on Server instance at:
    at emitErrorNT (net.js:1336:8)
    at processTicksAndRejections (internal/process/task_queues.js:84:21) {
  code: 'EADDRNOTAVAIL',
  errno: -99,
  syscall: 'listen',
  address: myip,
  port: 8080
}

Я знаю, что 8080 правильно перенаправлен, так как другой пример сервера (Apache) работает просто хорошо, и может быть подключен с моего внешнего IP.

1 Ответ

0 голосов
/ 21 января 2020

TLDR:

Просто прослушайте порт и удалите IP-адрес:

app.listen(port)

Что происходит:

Когда вы делаете следующее:

app.listen(port, 'my.ip.address')

Что вы делаете, так это сообщаете своей ОС, что вы хотите прослушивать входящий пакет из порта сетевой карты, которой принадлежит этот IP-адрес.

Если ОС не может найти сетевую карту (например, rnet, wifi et c.), Которому назначен этот IP-адрес, ваша ОС выдаст ошибку, сообщив, что не может найти оборудование, которое вы хотите прослушать.

Поскольку ваш внешний IP-адрес принадлежит внешнему сетевое устройство вашего маршрутизатора. Ваша ОС не может найти оборудование, которому принадлежит IP-адрес.

Альтернативное решение

Вы можете просто прослушать IP-адрес, назначенный сетевой карте, подключенной к вашему маршрутизатору. :

    app.listen(port, 'my.local.ip.address')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...