Search code examples
javascriptnode.jsexpressipv6

Node.js server.address().address returns ::


If I remember correctly it used to display "localhost" a few days ago. I am not sure what had changed that made server.address().address return double colons (::) instead. I read here that it returns an IPv6 address (::) if it is available but it's disabled on my PC. https://nodejs.org/api/http.html#http_server_listen_port_hostname_backlog_callback


Solution

  • As the docs say,

    Begin accepting connections on the specified port and hostname. If the hostname is omitted, the server will accept connections on any IPv6 address (::) when IPv6 is available, or any IPv4 address (0.0.0.0) otherwise. A port value of zero will assign a random port.

    So, the following code would print 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)
    });
    

    But if you add an explicit hostname:

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

    It would print what you want to see: running at http://127.0.0.1:3456

    Also, you might want to use some IP lib as pointed in this answer