簡體   English   中英

是否可以使用 NodeJS 根據 ip 地址查找設備地理位置?

[英]Is it possible to find device geo location based on ip address using NodeJS?

我正在嘗試實現一項功能,例如 Instagram 提供的功能; 我說的是它的“登錄活動”頁面。 這就是我所說的: 在此處輸入圖像描述

每次用戶登錄時,當前正在使用的設備都會存儲在頁面中。 我怎么會 go 呢?

我擁有的當前代碼使用兩個庫,一個用於從正在使用的設備中找到 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 地址的緯度和經度值(如果您需要,還可以提供更多)。

更多文檔

您可以試試 IP2Location Node.js。

https://github.com/ip2location/ip2location-nodejs

它可以調用數據庫文件(免費付費)或調用web 服務

對於數據庫,代碼將類似於以下內容:

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

對於 web 服務,您可以使用以下示例:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM