我对NodeJS和它所有的神奇之处还是个新手。我正在尝试弄清楚如何组合geoip-lite和request-ip npm包来获得我的应用程序的大致用户位置。
到目前为止,我有这个
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;我在使用request-ip获取IP时遇到了问题。geoip-lite很简单,只需要2分钟。我想我对Nodejs的不了解也帮不上忙。一个代码示例来告诉我我做错了什么,或者没有想到什么,那就太好了。
发布于 2016-11-20 09:50:59
我认为问题出在你向服务器发出请求的方式()。
对于您的测试,如果您使用像http://localhost:3000这样的url,那么您将获得::1
但是,如果尝试使用http://127.0.0.1:3000,那么您可能会得到IP地址:::ffff:127.0.0.1
下面是我用来测试的Express代码,我使用Postman App发出请求
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);https://stackoverflow.com/questions/40699723
复制相似问题