javascript - Heroku nodejs 服务器出现 EADDRNOTAVAIL 错误

标签 javascript node.js heroku

我已经在 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);

关于javascript - Heroku nodejs 服务器出现 EADDRNOTAVAIL 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39573246/

相关文章:

javascript - 我的 JS/jQuery 创建 div 有困难

node.js - 有没有办法让我的机器人检查私信并将其发布到我服务器的 channel 中?

ruby-on-rails - Vanity、Rails 3 和 Heroku

node.js - 无法将 Node.js 应用程序编译到 heroku

javascript - 使用 highcharts-export-server 注入(inject)变量饼图时出现问题

git - 是否可以从 heroku 检索您的源代码?

javascript - 不以科学计数法显示的 JavaScript 数字可以有多小?

javascript - 如何在所有类型的屏幕上始终将对象放置在左侧图像下方(响应式)

javascript - 安装 npm install mysql 后,从哪里获取 mysql 的用户名和密码?

javascript - 用JS访问ejs文件中的静态文件