2014-11-08 142 views
2

聽的時候當我在Heroku上部署此:Heroku的應用程序崩潰的process.env.PORT

app.js

var port = process.env.PORT || 8080; 

app.listen(port, function(){ 
    console.log("Listening on port : " + port); 
}); 

我的錯誤日誌:

2014-11-08T18:05:34.300115+00:00 app[web.1]: events.js:72 
2014-11-08T18:05:34.300402+00:00 app[web.1]:   throw er; // Unhandled 'error' event 
2014-11-08T18:05:34.300404+00:00 app[web.1]:    ^
2014-11-08T18:05:34.303599+00:00 app[web.1]: Error: listen EADDRINUSE 
2014-11-08T18:05:34.303605+00:00 app[web.1]:  at errnoException (net.js:904:11) 
2014-11-08T18:05:34.303607+00:00 app[web.1]:  at Server._listen2 (net.js:1042:14) 
2014-11-08T18:05:34.303608+00:00 app[web.1]:  at listen (net.js:1064:10) 
2014-11-08T18:05:34.303610+00:00 app[web.1]:  at Server.listen (net.js:1138:5) 
2014-11-08T18:05:34.303628+00:00 app[web.1]:  at Function.app.listen (/app/node_modules/express/lib/application.js:556:24) 
2014-11-08T18:05:34.303629+00:00 app[web.1]:  at Object.<anonymous> (/app/bin/www:7:18) 
2014-11-08T18:05:34.303630+00:00 app[web.1]:  at Module._compile (module.js:456:26) 
2014-11-08T18:05:34.303632+00:00 app[web.1]:  at Object.Module._extensions..js (module.js:474:10) 
2014-11-08T18:05:34.303633+00:00 app[web.1]:  at Module.load (module.js:356:32) 
2014-11-08T18:05:34.303635+00:00 app[web.1]:  at Function.Module._load (module.js:312:12) 

但是當我直接聽8080端口它工作,我不明白爲什麼:

var port = 8080; 
    app.listen(port, function(){ 
     console.log("Listening on port : " + port); //it work 
    }); 

我剛開始使用nodejs,我不明白它爲什麼崩潰。

有人可以解釋這個或如何「調試」這個原因?

謝謝!

回答

3

OK,問題是,快遞發電機創建包含/斌/ WWW文件:

#!/usr/bin/env node 
var debug = require('debug')('toto'); 
var app = require('../app'); 

app.set('port', process.env.PORT || 3000); 

var server = app.listen(app.get('port'), function() { 
    debug('Express server listening on port ' + server.address().port); 
}); 

這就是爲什麼已經使用的端口。

謝謝

+0

你已經發現了從未記錄,也從未說過的祕密寶石。我花了DAYS試圖發現這個錯誤。我沒有編碼錯誤,表達式發生器只是在一個奇怪的文件中做了一些我未曾說過的話。我很生氣,但我現在至少可以繼續前進。 T.Y. ! – Ric 2015-10-11 08:09:01

1

錯誤「EADDRINUSE」表示某個東西已經在監聽此端口。

我想沒有什麼東西在你的機器上聽8080,這就是爲什麼它直接設置它的原因。使用console.log(process.env.PORT)打印您試圖聆聽的端口。 然後檢查什麼程序監聽使用netstat -tunap此端口,您會收到類似這樣的東西:

Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name 

tcp 0 0 0.0.0.0:37 0.0.0.0:* LISTEN 3425/inetd 

tcp 0 0 0.0.0.0:6000 0.0.0.0:* LISTEN 3640/X 

tcp 0 0 0.0.0.0:113 0.0.0.0:* LISTEN 3425/inetd 

tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 7586/sshd 

殺掉相關的程序,然後再試一次。

要調試nodejs,我會推薦node-inspector,非常容易使用,它使用chrome開發工具ui。