mirror of
https://github.com/italicsjenga/handlebars-ipinfo.git
synced 2024-11-24 05:21:29 +11:00
Add caching of IP info
This commit is contained in:
parent
bc17ff8b7b
commit
0dfc40d2b0
24
index.ts
24
index.ts
|
@ -3,10 +3,12 @@ import expresshb = require('express-handlebars');
|
||||||
import http = require('http');
|
import http = require('http');
|
||||||
import https = require('https');
|
import https = require('https');
|
||||||
import Promise = require('promise');
|
import Promise = require('promise');
|
||||||
|
import HashMap = require('hashmap');
|
||||||
|
|
||||||
import { IPGeoJson } from './ip_geo';
|
import { IPGeoJson } from './ip_geo';
|
||||||
|
|
||||||
var app = express();
|
var app = express();
|
||||||
|
var cache = new HashMap();
|
||||||
|
|
||||||
app.engine('handlebars', expresshb({ defaultLayout: 'main' }));
|
app.engine('handlebars', expresshb({ defaultLayout: 'main' }));
|
||||||
app.set('view engine', 'handlebars');
|
app.set('view engine', 'handlebars');
|
||||||
|
@ -15,12 +17,12 @@ app.get('/', function (req, res) {
|
||||||
getIpInfo("::ffff:" + "119.17.156.106").done(function (geoinfo: IPGeoJson) {
|
getIpInfo("::ffff:" + "119.17.156.106").done(function (geoinfo: IPGeoJson) {
|
||||||
res.render('home', {
|
res.render('home', {
|
||||||
helpers: {
|
helpers: {
|
||||||
ip: function() { return geoinfo.ip; },
|
ip: function () { return geoinfo.ip; },
|
||||||
city: function() { return geoinfo.city; },
|
city: function () { return geoinfo.city; },
|
||||||
region: function() {return geoinfo.region; },
|
region: function () { return geoinfo.region; },
|
||||||
country: function() { return geoinfo.country; },
|
country: function () { return geoinfo.country; },
|
||||||
loc: function() { return geoinfo.loc; },
|
loc: function () { return geoinfo.loc; },
|
||||||
postal: function() { return geoinfo.postal }
|
postal: function () { return geoinfo.postal }
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}); //replace with req.ip
|
}); //replace with req.ip
|
||||||
|
@ -48,11 +50,17 @@ function getIpInfo(ip: String): Promise.IThenable<{}> {
|
||||||
});
|
});
|
||||||
|
|
||||||
response.on('end', function () {
|
response.on('end', function () {
|
||||||
console.log(str);
|
var result = <IPGeoJson>JSON.parse(str.slice(9));
|
||||||
resolve(<IPGeoJson>JSON.parse(str.slice(9)));
|
cache.set(ip, result);
|
||||||
|
resolve(result);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var cached = cache.get(ip);
|
||||||
|
if (cached != null) {
|
||||||
|
resolve(cached);
|
||||||
|
} else {
|
||||||
https.get(options, callback);
|
https.get(options, callback);
|
||||||
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
Loading…
Reference in a new issue