我有我的第一个node.js应用程序(本地运行正常) - 但我无法通过heroku(第一次w/heroku)部署它.代码如下.所以我不会写这么多代码,所以我只想说在我的网络中本地运行代码没有问题.
 var http = require('http');
 var fs = require('fs');
 var path = require('path');
 http.createServer(function (request, response) {
    console.log('request starting for ');
    console.log(request);
    var filePath = '.' + request.url;
    if (filePath == './')
        filePath = './index.html';
    console.log(filePath);
    var extname = path.extname(filePath);
    var contentType = 'text/html';
    switch (extname) {
        case '.js':
            contentType = 'text/javascript';
            break;
        case '.css':
            contentType = 'text/css';
            break;
    }
    path.exists(filePath, function(exists) {
        if (exists) {
            fs.readFile(filePath, function(error, content) {
                if (error) {
                    response.writeHead(500);
                    response.end();
                }
                else {
                    response.writeHead(200, { 'Content-Type': contentType });
                    response.end(content, 'utf-8');
                }
            });
        }
        else {
            response.writeHead(404);
            response.end();
        }
    });
 }).listen(5000);
 console.log('Server running at http://127.0.0.1:5000/');
任何的想法 ?
red*_*nce 913
Heroku动态地为您的应用分配一个端口,因此您无法将端口设置为固定数字.Heroku将端口添加到env中,因此您可以从那里拉出它.切换你的听:
__CODE__
这样,当你在本地测试时它仍然会听到端口5000,但它也可以在Heroku上运行.
你可以在这里查看Node.js上的Heroku文档.
小智 27
当Heroku 无法绑定端口或主机名时,会发生错误server.listen(port, [host], [backlog], [callback]).
Heroku要求的是.listen(process.env.PORT)或.listen(process.env.PORT, '0.0.0.0')
更一般地说,为了支持其他环境,请使用:
var server_port = process.env.YOUR_PORT || process.env.PORT || 80;
var server_host = process.env.YOUR_HOST || '0.0.0.0';
server.listen(server_port, server_host, function() {
    console.log('Listening on port %d', server_port);
});
vin*_*esh 26
在使用yeoman的angular-fullstack生成的项目并删除为我工作的IP参数时,我遇到了同样的问题.
我替换了这段代码
server.listen(config.port, config.ip, function () {
  console.log('Express server listening on %d, in %s mode', config.port, app.get('env'));
});
同
server.listen(config.port, function () {
  console.log('Express server listening on %d, in %s mode', config.port, app.get('env'));
});
zth*_*.nc 24
值得一提的是,如果你的代码不指定端口,那么它不应该是一个web过程,可能应该是一个worker过程,而不是.
所以,改变你Procfile的阅读(填写你的特定命令):
worker: YOUR_COMMAND
然后还在CLI上运行:
$ heroku scale worker=1
gre*_*egb 21
对于那些同时通过端口和主机的人,请记住Heroku 不会绑定到 localhost.
你必须通过 0.0.0.0主持人.
即使您使用的是正确的端口.我们不得不做出这样的调整:
# port (as described above) and host are both wrong
const host = 'localhost';
const port = 3000;
# use alternate localhost and the port Heroku assigns to $PORT
const host = '0.0.0.0';
const port = process.env.PORT || 3000;
然后你可以像往常一样启动服务器:
app.listen(port, host, function() {
  console.log("Server started.......");
});
您可以在此处查看更多详细信息:https://help.heroku.com/P1AVPANS/why-is-my-node-js-app-crashing-with-an-r10-error
就我而言,我使用了https://hapijs.com/中的示例
解决我替换的问题
server.connection({ 
    host: 'localhost', 
    port: 8000 
});
同
server.connection({
    port: process.env.PORT || 3000 
});
小智 7
改变这一行
app.listen(port);
到
app.listen(process.env.PORT, '0.0.0.0');
它会工作
虽然这里的大多数答案都是有效的,但对我来说问题是我正在运行很长的进程作为其中的一部分npm run start导致超时。
我在这里找到了解决方案并对其进行了总结,我只需要转到npm run build一项postinstall任务即可。
换句话说,我改变了这个:
"start": "npm run build && node server.js"
对此:
"postinstall": "npm run build",
"start": "node server.js"
想想看,这是完全有道理的,因为随着我的应用程序不断增长,这个错误(曾经偶尔出现)变得越来越普遍。
| 归档时间: | 
 | 
| 查看次数: | 166349 次 | 
| 最近记录: |