是否可以使用 NodeJS 根据 ip 地址查找设备地理位置?
Is it possible to find device geo location based on ip address using NodeJS?
我正在尝试实现一项功能,例如 Instagram 提供的功能;我说的是它的“登录 activity”页面。这就是我要说的:
每次用户登录时,当前正在使用的设备都会存储在页面中。我该怎么做?
我目前的代码使用了两个库,一个用于从正在使用的设备中查找 ip.address() ,另一个用于帮助我获取有关给定 ip 的位置数据地址。可悲的是,我无法让它发挥作用。代码如下所示:
const ipLocation = require('ip-to-location')
const ip = require('ip')
const loc = await ipLocation.fetch(ip.address())
console.dir('Location', loc)
await User.findOneAndUpdate(
{ email: req.body.email },
{
$push: {
loginActivity: {
type: 'Point',
coordinates: [loc.longitude, loc.latitude],
// formattedAddress: loc[0].formattedAddress,
// street: loc[0].streetName,
city: loc.city.city,
state: loc.region_name,
zipcode: loc.zip_code,
country: loc.country_code,
},
},
}
)
是否有任何备用库可供使用?或者有人可以指出正确的方向来实现这一目标吗?
好吧,如果你能得到一个用户的ip地址,你可以试试ipgeolocation.io
这是一个免费的 api,可以为您提供 IP 地址的纬度和经度值(如果您需要,还可以提供更多信息)。
更多内容在 documentation
您可以试试 IP2Location Node.js。
https://github.com/ip2location/ip2location-nodejs
它可以调用数据库文件(free or paid) or call a web service.
对于数据库,代码类似于以下内容:
const {IP2Location} = require("ip2location-nodejs");
let ip2location = new IP2Location();
ip2location.open("./DB25.BIN");
testip = ['8.8.8.8', '2404:6800:4001:c01::67'];
for (var x = 0; x < testip.length; x++) {
result = ip2location.getAll(testip[x]);
for (var key in result) {
console.log(key + ": " + result[key]);
}
console.log("--------------------------------------------------------------");
}
ip2location.close();
对于网络服务,您可以使用以下示例:
const {IP2LocationWebService} = require("ip2location-nodejs");
let ws = new IP2LocationWebService();
let ip = "8.8.8.8";
let apiKey = "YOUR_API_KEY";
let apiPackage = "WS25";
let useSSL = true;
// addon and lang to get more data and translation (leave both blank if you don't need them)
let addon = "continent,country,region,city,geotargeting,country_groupings,time_zone_info";
let lang = "fr";
ws.open(apiKey, apiPackage, useSSL);
ws.lookup(ip, addon, lang, (err, data) => {
if (!err) {
console.log(data);
ws.getCredit((err, data) => {
if (!err) {
console.log(data);
}
});
}
});
我正在尝试实现一项功能,例如 Instagram 提供的功能;我说的是它的“登录 activity”页面。这就是我要说的:
每次用户登录时,当前正在使用的设备都会存储在页面中。我该怎么做?
我目前的代码使用了两个库,一个用于从正在使用的设备中查找 ip.address() ,另一个用于帮助我获取有关给定 ip 的位置数据地址。可悲的是,我无法让它发挥作用。代码如下所示:
const ipLocation = require('ip-to-location')
const ip = require('ip')
const loc = await ipLocation.fetch(ip.address())
console.dir('Location', loc)
await User.findOneAndUpdate(
{ email: req.body.email },
{
$push: {
loginActivity: {
type: 'Point',
coordinates: [loc.longitude, loc.latitude],
// formattedAddress: loc[0].formattedAddress,
// street: loc[0].streetName,
city: loc.city.city,
state: loc.region_name,
zipcode: loc.zip_code,
country: loc.country_code,
},
},
}
)
是否有任何备用库可供使用?或者有人可以指出正确的方向来实现这一目标吗?
好吧,如果你能得到一个用户的ip地址,你可以试试ipgeolocation.io
这是一个免费的 api,可以为您提供 IP 地址的纬度和经度值(如果您需要,还可以提供更多信息)。
更多内容在 documentation
您可以试试 IP2Location Node.js。
https://github.com/ip2location/ip2location-nodejs
它可以调用数据库文件(free or paid) or call a web service.
对于数据库,代码类似于以下内容:
const {IP2Location} = require("ip2location-nodejs");
let ip2location = new IP2Location();
ip2location.open("./DB25.BIN");
testip = ['8.8.8.8', '2404:6800:4001:c01::67'];
for (var x = 0; x < testip.length; x++) {
result = ip2location.getAll(testip[x]);
for (var key in result) {
console.log(key + ": " + result[key]);
}
console.log("--------------------------------------------------------------");
}
ip2location.close();
对于网络服务,您可以使用以下示例:
const {IP2LocationWebService} = require("ip2location-nodejs");
let ws = new IP2LocationWebService();
let ip = "8.8.8.8";
let apiKey = "YOUR_API_KEY";
let apiPackage = "WS25";
let useSSL = true;
// addon and lang to get more data and translation (leave both blank if you don't need them)
let addon = "continent,country,region,city,geotargeting,country_groupings,time_zone_info";
let lang = "fr";
ws.open(apiKey, apiPackage, useSSL);
ws.lookup(ip, addon, lang, (err, data) => {
if (!err) {
console.log(data);
ws.getCredit((err, data) => {
if (!err) {
console.log(data);
}
});
}
});