2013-05-17 62 views
5

考慮以下代碼用於其餘API節點服務器。如何獲取Restify服務器的確切IP地址進行監聽?

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); 
}); 

運行了該服務器節點:

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

它顯示0.0.0.0這是不對的。

任何人都可以如何控制檯登錄服務器的確切IP時,它打開?

感謝


更新: 上執行下面的代碼我得到下面提到的輸出,這又是製造困難,這IP選?

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); 
    }); 

輸出:

{ '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

在這種情況下,你應該選擇'192.168.3.60',因爲它不是內部*和* IPv4的。 – robertklep

回答

2
+0

'server.address()'返回相同的0.0.0.0 ..任何線索? '{address:'0.0.0.0',family:'IPv4',port:8080}' –

+0

and:require('os')。getNetworkInterfaces(); – krampstudio

+0

根據您的輸入更新我的問題。但仍然無法得到確切的要求:( –

0

得到了一些解決方案,如下所示。

總是歡迎任何改進。

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

有同樣的問題,並想出了這個問題,基本上可以通過另一個參數的。聽()函數,這應該是您的服務器的IP地址

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


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

你拿你的服務器IP地址只需在終端中執行「traceroute www.WEBSITE_URL.com」。

讓我知道你是否還有問題。

感謝 馬赫迪