handlebars-ipinfo/index.ts

49 lines
1.1 KiB
TypeScript
Raw Normal View History

2017-06-02 19:00:22 +10:00
import express = require('express');
import expresshb = require('express-handlebars');
2017-06-02 20:43:16 +10:00
import http = require('http');
import https = require('https');
2017-06-02 21:16:55 +10:00
import Promise = require('promise');
2017-06-02 20:43:16 +10:00
import { IPGeoJson } from './ip_geo';
2017-06-02 19:00:22 +10:00
var app = express();
2017-06-02 19:07:34 +10:00
app.engine('handlebars', expresshb({ defaultLayout: 'main' }));
2017-06-02 19:00:22 +10:00
app.set('view engine', 'handlebars');
2017-06-02 19:07:34 +10:00
2017-06-02 19:00:22 +10:00
app.get('/', function (req, res) {
2017-06-02 21:16:55 +10:00
getIpInfo("::ffff:" + "119.17.156.106").done(function (geoinfo: IPGeoJson) {
res.render('home');
}); //replace with req.ip
2017-06-02 19:00:22 +10:00
});
2017-06-02 20:43:16 +10:00
app.listen(3000);
2017-06-02 21:16:55 +10:00
function getIpInfo(ip: String): Promise.IThenable<{}> {
return new Promise(function (resolve, reject) {
var options = {
host: 'ipinfo.io',
port: 443,
path: '/' + ip + '/geo',
method: 'GET',
headers: {
'Content-Type': 'application/json'
}
2017-06-02 20:43:16 +10:00
}
2017-06-02 21:16:55 +10:00
var callback = function (response: http.IncomingMessage) {
var str: string;
2017-06-02 20:43:16 +10:00
2017-06-02 21:16:55 +10:00
response.on('data', function (chunk) {
str += chunk;
});
2017-06-02 20:43:16 +10:00
2017-06-02 21:16:55 +10:00
response.on('end', function () {
console.log(str);
resolve(<IPGeoJson>JSON.parse(str.slice(9)));
});
}
2017-06-02 20:43:16 +10:00
2017-06-02 21:16:55 +10:00
https.get(options, callback);
})
2017-06-02 20:43:16 +10:00
}