我有我的第一个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/');
Run Code Online (Sandbox Code Playgroud)
任何的想法 ?
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);
});
Run Code Online (Sandbox Code Playgroud)
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'));
});
Run Code Online (Sandbox Code Playgroud)
同
server.listen(config.port, function () {
console.log('Express server listening on %d, in %s mode', config.port, app.get('env'));
});
Run Code Online (Sandbox Code Playgroud)
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;
Run Code Online (Sandbox Code Playgroud)
然后你可以像往常一样启动服务器:
app.listen(port, host, function() {
console.log("Server started.......");
});
Run Code Online (Sandbox Code Playgroud)
您可以在此处查看更多详细信息: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
});
Run Code Online (Sandbox Code Playgroud)
同
server.connection({
port: process.env.PORT || 3000
});
Run Code Online (Sandbox Code Playgroud)
小智 7
改变这一行
app.listen(port);
Run Code Online (Sandbox Code Playgroud)
到
app.listen(process.env.PORT, '0.0.0.0');
Run Code Online (Sandbox Code Playgroud)
它会工作
虽然这里的大多数答案都是有效的,但对我来说问题是我正在运行很长的进程作为其中的一部分npm run start导致超时。
我在这里找到了解决方案并对其进行了总结,我只需要转到npm run build一项postinstall任务即可。
换句话说,我改变了这个:
"start": "npm run build && node server.js"
Run Code Online (Sandbox Code Playgroud)
对此:
"postinstall": "npm run build",
"start": "node server.js"
Run Code Online (Sandbox Code Playgroud)
想想看,这是完全有道理的,因为随着我的应用程序不断增长,这个错误(曾经偶尔出现)变得越来越普遍。
| 归档时间: |
|
| 查看次数: |
166349 次 |
| 最近记录: |