2017-07-21 14 views
0

如果你想,當你開始在節點服務器獲得的地址(主機和端口)信息之前,因此,您可能會做:的NodeJS server.address()方法返回「聽」事件發出

const server = http.createServer() 
server.listen(() => { 
    console.log(`Running on port: ${server.address().port}`) 
}) 

Doc還表示,server.address()只應調用直到「聽」事件已經發出

但如果你試試這個:

const server = http.createServer() 
server.listen() 
console.log(server.address()) 

它仍然註銷ŧ他的實際地址而不是null,爲什麼?

+0

你不應該這樣做並不意味着它不起作用。 – PeterMader

+0

@PeterMader所以我很好奇這些代碼行何時會失效 – ohmyxm

+0

這並不保證能夠正常工作。當由於端口被佔用或系統負載過重或天氣不正確或出於任何其他原因而無法創建服務器時,它將失敗。不要像這樣編寫代碼,也不要從無證行爲中跳到結論。 – Tomalak

回答

0

server.listen()方法是異步的,在您撥打console.log(server.address())(與您的第二個示例一樣)時,可能沒有完全設置所有設置。

您的第二個示例是在執行時記錄實際地址(即null),因爲它在服務器完成安裝之前調用。這就是爲什麼你能提供一個回調方法作爲參數

server.listen(() => { 
    console.log('Running on port: ${server.address().port}'); 
}); 

這允許你做的任何類別的要求服務器偵聽可以保證後,該服務器最多可以執行的操作和聽着。

0

根據server.listen()

doc此功能是異步的。當服務器被綁定時,將會發出'聆聽'事件。

所以

const server = http.createServer() 
server.listen() 
console.log(server.address()) 

不過註銷的實際地址。