EADDRNOTAVAIL与Heroku nodejs服务器错误 [英] 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; //未处理的'错误'事件
^
错误:侦听EADDRNOTAVAIL MYSERVERIP:41184
在Object.exports._errnoException(util.js:893:11)
处于exports._exceptionWithHostPort (util.js:916:20)
在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);
I have developped a nodejs server on OpenShift and I am now trying to make the same kind of server on Heroku for a new project.
Here is a minimal code of my server:
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);
Differences with my OpenShift server are:
- The replacement of variables process.env.OPENSHIFT_NODEJS_PORT, process.env.OPENSHIFT_NODEJS_IP by process.env.PORT and process.env.IP.
- I set the IP variable with this command line: heroku config:set IP=MYSERVERADDRESS.com
I cannot start my server, it always crash and I don't understand why, the logs of my server are:
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)
My guess would be that your Heroku server will not have your (external) server address as its (internal) IP-number (the external IP-address will most likely terminate earlier in the Heroku network stack), which means that you cannot explicitly listen on it (which is basically what EADDRNOTAVAIL
means).
Instead, don't use an address to listen to at all:
server.listen(port);
这篇关于EADDRNOTAVAIL与Heroku nodejs服务器错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!