2015-11-22 33 views
18

Nếu tôi nhớ chính xác nó được sử dụng để hiển thị "localhost" một vài ngày trước. Tôi không chắc chắn những gì đã thay đổi mà làm cho server.address() địa chỉ trở lại đôi dấu hai chấm (:) thay vào đó. Tôi đọc ở đây rằng nó trả về một địa chỉ IPv6 (:) nếu nó có sẵn nhưng nó bị vô hiệu hóa trên máy tính của tôi. https://nodejs.org/api/http.html#http_server_listen_port_hostname_backlog_callbackNode.js server.address() địa chỉ trả về ::

+0

Tôi đã triển khai thành công: var host = server.address(). Address; host = (host == '::')? 'localhost': host; –

Trả lời

37

Như các tài liệu nói,

Bắt đầu chấp nhận các kết nối trên cổng và tên máy cụ thể. Nếu tên máy chủ bị bỏ qua, máy chủ sẽ chấp nhận các kết nối trên bất kỳ địa chỉ IPv6 nào (:) khi IPv6 có sẵn hoặc bất kỳ địa chỉ IPv4 nào (0.0.0.0) nếu không. Giá trị cổng bằng 0 sẽ gán một cổng ngẫu nhiên.

Vì vậy, các mã sau đây sẽ in 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) 
}); 

Nhưng nếu bạn thêm một hostname rõ ràng:

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

Nó sẽ in những gì bạn muốn xem: running at http://127.0.0.1:3456

Ngoài ra bạn có thể kiến ​​sử dụng some IP lib như được chỉ trong this answer

Trân trọng, Alexander

+2

Các chỉ số IPv6 trong URL phải được bao quanh bởi các dấu ngoặc vuông, ví dụ: 'http: // [::]: 3456' –

+0

Cảm ơn bạn bây giờ tôi đã hiểu nó tốt hơn. Những gì tôi vẫn không hiểu là lý do tại sao nó được lựa chọn IPv6 thay vì IPv4 mặc dù tôi đã vô hiệu hóa IPv6 trên máy tính của tôi? – Jake

+0

@Jake Tôi không chắc chắn về việc tắt IPv6m nhưng điều này cũng xảy ra trong các phiên bản nút cũ (trong thực thể, 0,12) –

Các vấn đề liên quan