2015-11-22 56 views
18

如果我沒記錯的話前幾天它用來顯示「localhost」。我不知道什麼改變了server.address()。地址返回雙冒號(::)代替。 我在這裏讀到它返回一個IPv6地址(::),如果它可用但它在我的PC上被禁用。 ​​Node.js server.address()。address returns ::

+0

我成功實施的黑客:var host = server.address()。address; host =(host =='::')? 「本地主機」:主機; –

回答

37

作爲文檔說,

開始接受指定端口和主機名上的連接。如果省略主機名,則服務器將接受任何IPv6地址(:)上的連接,當IPv6可用時,或者任何IPv4地址(0.0.0.0)。端口值爲零將分配一個隨機端口。

所以,下面的代碼將打印running at http://:::3456

var express  = require('express'); 
var app   = express(); 
var server = app.listen(3456, function() { 
    var host = server.address().address; 
    var port = server.address().port; 
    console.log('running at http://' + host + ':' + port) 
}); 

但是,如果你添加一個明確的主機名:

var server = app.listen(3456, "127.0.0.1", function() { 

這將打印你希望看到什麼:running at http://127.0.0.1:3456

另外你也可能會使用some IP lib,如this answer

問候,亞歷山大

+2

URL中的IPv6文字應該用方括號括起來,例如, 'http:// [::]:3456' –

+0

謝謝,我現在明白了。我仍然不明白爲什麼它選擇IPv6而不是IPv4,即使我的機器上禁用了IPv6? – Jake

+0

@Jake我不知道關於禁用IPv6m,但這也發生在舊的節點版本(特別是0.12) –