2016-09-19 62 views
2

我已经在OpenShift上开发了一个nodejs服务器,现在我正试图在Heroku上为一个新项目制作同一种服务器。错误EADDRNOTAVAIL与Heroku nodejs服务器

这里是我的服务器的最少的代码:

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.OPENSHIFT_NODEJS_PORT,process.env.OPENSHIFT_NODEJS_IP的过程.env.PORT和process.env.IP。
  • 我设置使用此命令行的IP变量:Heroku的配置:设定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) 

回答

4

我的猜测是,你的Heroku服务器不会有你的(外部)服务器的地址作为其(内部)IP号码(外部IP地址很可能会终止此前在Heroku的网络堆栈),这意味着你不能明确地听它(这基本上就是EADDRNOTAVAIL的意思)。

取而代之的是,不要用一个监听的地址在所有:

server.listen(port); 
+0

啊,让示例应用程序工作的喜悦.... – eflat