2012-12-31 28 views
0

我在RingoJS中遇到了一個非常奇怪的問題。考慮保存在main.js下面的代碼:RingoJS httpserver拋出BindException

var {Application} = require("stick"); 
var {main} = require("ringo/httpserver"); 
var app = exports.app = new Application; 
app.configure("error", "notfound"); 
if (module === require.main) 
    main(module.id); 

運行ringo main.js開始按預期​​http服務器,顯示默認notfound頁面。

現在考慮下面的代碼,這是與上面相同,不同的是我硬編碼的if條件爲true

var {Application} = require("stick"); 
var {main} = require("ringo/httpserver"); 
var app = exports.app = new Application; 
app.configure("error", "notfound"); 
if (true) main(module.id); 

運行ringo main.js啓動http服務器,但打開網站它給了我一個error頁面而不是notfound頁面。它說Wrapped java.net.BindException: Address already in use,並給了我下面的堆棧跟蹤:

at ringo/httpserver.js:327 (Server) 
at ringo/httpserver.js:428 (init) 
at ringo/httpserver.js:506 (main) 
at /home/aaditmshah/main.js:5 
at ringo/jsgi/connector.js:28 (handleRequest) 

發生了什麼事? if條件如何影響服務器?畢竟這兩個條件都表示值true(這是http服務器工作的原因)。這讓我非常困惑。這是一個錯誤嗎?

+1

進入的請求將在腳本的第二個版本中重新執行您的主模塊。有一個原因,我們寫「if(module === require.main)」,見本頁底部:http://ringojs.org/tutorial/httpserver.md – oberhamsi

+0

@oberhamsi - 不是'module.exports '通過'require'存儲並存儲在緩存中? AFAIK,即使你'需要'相同的模塊兩次,它只會被執行一次。 –

+0

@oberhamsi - 請您將您的評論寫爲答案,以便我可以接受它? –

回答

相關問題