2013-05-17 18 views
5

Si consideri il seguente codice per il server di nodo API resto.Come ottenere l'esatto indirizzo IP del server Restify in ascolto?

var restify = require('restify'); 

var server = restify.createServer(); 

server.get('/echo/:name', function (req, res, next) { 
    res.send({name: req.params.name}); 
    next(); 
}); 

server.listen(8080, function() { 
    console.log('%s listening at %s', server.name, server.url); 
}); 

esecuzione su server con il nodo:

$ node echo.js 
restify listening at http://0.0.0.0:8080 

Essa mostra 0.0.0.0 che è sbagliato.

Qualcuno su di me come console può registrare l'IP esatto del server quando è acceso?

Grazie


Aggiornamento: Sulla eseguire il seguente codice sto ottenendo l'uscita di sotto menzionato, che è ancora una volta rende difficile, che IP da scegliere?

rest_server.listen(config.appPort, function() { 
     var adrs = require('os').networkInterfaces(); 
      console.log(adrs); 
      console.log('%s listening at %s', rest_server.name, rest_server.url); 
    }); 

uscita:

{ 'Local Area Connection': [ { address: '192.168.3.60', family: 'IPv4', internal 
: false } ], 
    'Loopback Pseudo-Interface 1': 
    [ { address: '::1', family: 'IPv6', internal: true }, 
    { address: '127.0.0.1', family: 'IPv4', internal: true } ], 
    'isatap.TEST.ORG': 
    [ { address: 'fe80::5efe:c0a8:33c', 
     family: 'IPv6', 
     internal: false } ] } 
restify listening at http://0.0.0.0:8080 
+0

In questo caso, si dovrebbe scegliere '192.168.3.60' perché non è * * interno e IPv4. – robertklep

risposta

2

È possibile impostare l'indirizzo reale al metodo di ascolto, vedere

http://mcavage.github.io/node-restify/#Server-API e http://nodejs.org/docs/latest/api/net.html#net_server_listen_path_callback

server.address() può restituire l'indirizzo del server era destinato a:

http://nodejs.org/docs/latest/api/net.html#net_server_address

+0

'server.address()' restituisce lo stesso 0.0.0.0 .. Qualche idea? '{indirizzo: '0.0.0.0', famiglia: 'IPv4', porta: 8080}' –

+0

e: require ('os'). getNetworkInterfaces(); – krampstudio

+0

Ho aggiornato la mia domanda in base agli input. (Ancora non è in grado di ottenere esattamente ciò che è necessario :( –

0

Ottenuto qualche soluzione, che è la seguente.

Eventuali miglioramenti sullo stesso sono sempre benvenuti.

var osDetails = require('os'); 

function getDynamicIP(calbck) { 
    var ip; 
    try { 
     var adrs = osDetails.networkInterfaces(); 
     for (key in adrs) { 
      if (adrs.hasOwnProperty(key)) { 
       if (adrs[key][0].internal === false && adrs[key][0].family === 'IPv4') { 
        ip = adrs[key][0].address; 
        break; 
       } 
      } 
     } 
    } 
    catch (e) { 
     return calbck(e, null); 
    } 
    return calbck(null, ip); 
} 
5

avuto lo stesso problema e capito il problema, in pratica è possibile passare un altro parametro alla funzione .listen() e che dovrebbe essere il vostro indirizzo IP del server

server.listen(port, [host], [backlog], [callback]) 


server.listen(port, YOUR IP ADDRESS, function(){ }); 

per voi per ottenere la vostra l'indirizzo IP del server esegue semplicemente "traceroute www.WEBSITE_URL.com" nel terminale.

fammi sapere se hai ancora un problema.

grazie Mahdi