2014-05-03 26 views
0

我正在關注this tutorials來試驗Exress 4路由器。節點app.js不適用於express 4?

但是,當我鍵入:節點server.js,我得到了fllowing錯誤:

> events.js:72 
>   throw er; // Unhandled 'error' event 
>    ^Error: listen EADDRINUSE 
>  at errnoException (net.js:901:11) 
>  at Server._listen2 (net.js:1039:14) 
>  at listen (net.js:1061:10) 
>  at Server.listen (net.js:1135:5) 
>  at Function.app.listen (/Users/tom/Documents/Projects/express4router/node_modules/express/lib/application.js:531:24) 
>  at Object.<anonymous> (/Users/tom/Documents/Projects/express4router/server.js:22:5) 
>  at Module._compile (module.js:456:26) 
>  at Object.Module._extensions..js (module.js:474:10) 
>  at Module.load (module.js:356:32) 
>  at Function.Module._load (module.js:312:12) 

它看起來像節點app.js在express4不起作用。我如何在express 4中運行這個簡單的腳本?

var express = require('express'); 
var app  = express(); 
var port = process.env.PORT || 8080; 

app.get('/sample', function(req, res) { 
    res.send('this is a sample!'); 
}); 

app.listen(port); 
console.log('Magic happens on port ' + port); 
+0

你在窗戶上嗎? – 4dgaurav

回答

2

EADDRINUSE意味着你有其他的東西在那個端口上偵聽,這可能是另一個節點的應用程序。

can uselsof以確定哪些進程在該端口上運行,如果您不確定

+0

非常感謝!我切換到端口3000,它的工作原理! –

+0

但「lsof -i:8080」不顯示任何結果,根本沒有輸出。 8080是應該佔用的以前的端口號。是否使用lsof的正確參數? –

1

EADDRINUSE說,該端口已在使用。大概你已經開始你的應用程序一次,它仍然在運行。 (當我移植我的快速應用程序時,有時也會發生這種情況。)檢查是否有實例正在運行並終止它們。如果沒有人嘗試另一個端口。 (也許有一個完全不相關的應用程序運行在您的電腦上使用該端口。)

您的代碼看起來不錯,順便說一句。

0

我有同樣的問題,我在Ubuntu上,我剛剛將端口號更改爲3000,它解決了問題。

0

您希望爲您的應用程序使用端口8080,但已被某些其他應用程序使用。這就是爲什麼你得到這個錯誤「EADDRINUSE」。

> events.js:72 
>   throw er; // Unhandled 'error' event 
>    ^Error: listen EADDRINUSE 

所以對於它,無論是從8080更改端口號的代碼中的第3行1024-65535或傳輸端口8080上運行到其他端口的程序之間的一些其他自由港。 或者你可以強制殺死該程序,如果這對你沒有多大用處。

使用此命令可以列出那些正在利用當前系統

$ netstat -plten // or netstat -p tcp -ano 

上的所有端口,爲您的程序,以確定它是運用8080端口的程序可以運行此命令

$ netstat -plten | grep 8080 // or netstat -p tcp -ano | grep 8080 

上述命令將導致如下所示:

tcp6  0  0 :::8080    :::*     LISTEN  2237/unknownprogram  off (0.00/0/0) 

之前的數字/未知程序是一個進程ID。現在使用kill命令來終止進程

$ kill -9 8080 

-9意味着進程將被強行殺死。

相關問題