错误EADDRNOTAVAIL与Heroku nodejs服务器

Error EADDRNOTAVAIL with Heroku nodejs server

本文关键字:nodejs 服务器 Heroku EADDRNOTAVAIL 错误      更新时间:2023-09-26

我已经在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的替换。OPENSHIFT_NODEJS_PORT process.env。OPENSHIFT_NODEJS_IP by process.env.PORT and process.env.IP.
  • 我用下面的命令行设置IP变量:

我无法启动我的服务器,它总是崩溃,我不明白为什么,我的服务器的日志是:

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);