簡體   English   中英

Heroku Node.js服務器出現錯誤EADDRNOTAVAIL

[英]Error EADDRNOTAVAIL with Heroku nodejs server

我已經在OpenShift上開發了一個nodejs服務器,現在我正嘗試在Heroku上為新項目制造相同類型的服務器。

這是我的服務器的最少代碼:

var http = require('http');
var port = process.env.PORT || 8080;
var address = process.env.IP || '127.0.0.1';

console.log(address);
console.log(port);

var server = http.createServer(function(req, res)
{
    res.writeHead(200, { 'Content-Type': 'text/html', 'Access-Control-Allow-Origin': '*' });
    res.write(JSON.stringify({ valid: true }));
    res.end();
});

server.listen(port, address);

與我的OpenShift服務器的區別是:

  • 用process.env.PORT和process.env.IP替換變量process.env.OPENSHIFT_NODEJS_PORT,process.env.OPENSHIFT_NODEJS_IP。
  • 我使用以下命令行設置IP變量:heroku config:set IP = MYSERVERADDRESS.com

我無法啟動服務器,它總是崩潰,並且我不明白為什么,服務器的日志為:

MYSERVERADDRESS.com
41184
events.js:154
       throw er; // Unhandled 'error' event
   ^
 Error: listen EADDRNOTAVAIL MYSERVERIP:41184
     at Object.exports._errnoException (util.js:893:11)
     at exports._exceptionWithHostPort (util.js:916:20)
     at Server.__dirname.Server.Server._listen2 (net.js:1233:19)
     at net.js:1391:9
     at GetAddrInfoReqWrap.asyncCallback [as callback] (dns.js:63:16)
     at listen (net.js:1282:10)
     at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:82:10)

我的猜測是,您的Heroku服務器將沒有(外部)服務器地址作為其(內部)IP號(外部IP地址很可能會在Heroku網絡堆棧中更早地終止),這意味着您無法顯式偵聽(基本上就是EADDRNOTAVAIL意思)。

相反,請不要使用任何地址來收聽:

server.listen(port);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM