Opening Maxmind db in Nodejs

Deadly 提交于 2020-03-27 07:23:18

问题


I am trying to open maxmind opensource database in my nodejs application. My application recieves a list of ip addressses from a java application. Application then returns the latitude and longitude corresponding to each ip. I have succesfully done this synchronously, but i want to do it asynchronously to make things a little faster. I have written a code for this, but the application gets killed everytime. I am guessing that the reason might be simultaneous opening of the same database(I might be wrong :D). I am posting the code below. Please take a look at it and make some suggestions on where I am going wrong. Thanks!!!

app.post('/endPoint', function(req, res){
var obj = req.body;
var list = [];
var ipList = obj.ipList;
for(var i = 0; i<ipList.length; i++){
var ip = ipList[i];
//console.log(i);
maxmind.open('./GeoLite2-City.mmdb', function(err, cityLookup){
if(err) throw err;
console.log("open database");
var city = cityLookup.get(ip);
if(city!=null){
var cordinates = {'latitude': city.location.latitude, 'longitude': geodata.location.longitude};
        //console.log(cordinates);
        list.push(cordinates);
      }
      if(list.length == ipList.length){
        res.json({finalMap: list});
      }
});
}
});

回答1:


You should open the database only once, and reuse it.

The easiest solution would be to synchronously open the database at the top of your file:

const maxmind    = require('maxmind');
const cityLookup = maxmind.openSync('./GeoLite2-City.mmdb');

Reading it asynchronously wouldn't speed things up a whole lot, and because loading the database is done only once (during app startup), I don't think it's a big deal that it may temporarily block the event loop for a few seconds.

And use the cityLookup function in your request handler:

app.post('/endPoint', function(req, res) {
  ...
  let city = cityLookup.get(ip);
  ...
});


来源:https://stackoverflow.com/questions/44039625/opening-maxmind-db-in-nodejs

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!