2016-11-20 207 views
0

我对NodeJS和它的所有迷人有点新鲜。我试图弄清楚如何结合geoip-literequest-ip npm软件包来获取我的应用的大致用户位置。Nodejs客户端IP

到目前为止,我有这个

var requestIp = require('request-ip'); 
var geoip = require('geoip-lite'); 
var express = require('express'); 
var app = express(); 

//var ip = "108.219.41.178";//207.97.227.239 
//var ip = req.headers['x-real-ip'] || req.connection.remoteAddress; 
//var ip = req.header('x-forwarded-for') || req.connection.remoteAddress; 

var ip = ??? 

var geo = geoip.lookup(ip); 

var port = process.env.PORT || 3000; 

/*app.use('/', function(req, res, next) { 
    var ipMiddleware = function(req, res, next) { 
    var clientIp = requestIp.getClientIp(req); 
    next(); 
    }; 
});*/ 

app.get('/', function(req, res) { 
    res.send('<html><head><head/><body><h1>Hello World!</h1></body></html'); 
}); 


app.listen(port, function() { 
    console.log('Hello on 3000');/*always put console.log to see if its running/working*/ 
    console.log(geo); 
    console.log("The IP is %s", geoip.pretty(ip)); 
}); 

/*node app.js to run*/ 

// var ip = req.headers['x-real-ip'] || req.connection.remoteAddress; 

我无法找出使用请求IP来获得IP。 geoip-lite非常容易,花了2分钟。我想我对Nodejs的noobness也没有帮助。一个代码示例,告诉我我在做什么错误或没有想到会很好。

+0

你用什么URL来测试?是偶然的,就像'http:// localhost:3000 /'? – Sgnl

回答

0

我认为问题是您向服务器发送请求的方式如何

对于你的测试,如果你使用像http://localhost:3000一个网址,然后你会得到::1

但是,如果尝试,而不是http://127.0.0.1:3000,那么你可能会得到的IP地址:::ffff:127.0.0.1

这里的快车代码我用来测试和我用邮递员应用程序发出请求

const Express = require('express'); 
const App = Express(); 

App.get('/', (req, res) => { 
    var ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress || req.socket.remoteAddress; 
    res.send({ ip }) 
}); 

App.listen(3000);