v1.js 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. var express = require('express');
  2. var request = require('request');
  3. var router = express.Router();
  4. router.all('*', function(req, res, next) {
  5. res.header("Content-Type", "application/json;charset=utf-8");
  6. next();
  7. });
  8. router.get('/', function(req, res, next) {
  9. var host = req.hostname;
  10. var protocol = req.protocol;
  11. var originalUrl = req.originalUrl;
  12. var ip = req.ip;
  13. if (originalUrl == /v1/) {
  14. ip2address(ip, function(data) {
  15. var output = {
  16. code: 200,
  17. IP: ip,
  18. info: 'Please Set URL Like This: ' + protocol + '://' + host + '/v1/?url=http[s]://YourWantProxyUrl.com'
  19. };
  20. if (data) {
  21. output['Location'] = data.area + data.location;
  22. }
  23. return res.send(output);
  24. });
  25. } else {
  26. var url = originalUrl.replace('/v1/?url=', '');
  27. url = url.indexOf('?') === -1 ? url.replace('&', '?') : url;
  28. url = url.indexOf('http://') === -1 ? 'http://' + url : url;
  29. getJSON(url, function(data) {
  30. if (req.query.callback) {
  31. return res.jsonp(data);
  32. } else {
  33. return res.send(data);
  34. }
  35. });
  36. }
  37. });
  38. function getJSON(url, callback, next) {
  39. request(url, function(err, res, body) {
  40. if (!err && res.statusCode == 200) {
  41. callback && callback(body);
  42. } else {
  43. console.log(err);
  44. }
  45. });
  46. }
  47. function ip2address(ip, callback) {
  48. request('http://apis.juhe.cn/ip/ip2addr?ip=' + ip + '&key=28c0a6a5eb9cca3f38bc5877a83c9868', function(err, res, body) {
  49. body = JSON.parse(body);
  50. if (!err && res.statusCode == 200 && body['error_code'] !== 200102) {
  51. callback && callback(body['result']);
  52. } else {
  53. console.log(' / request info:' + err);
  54. callback && callback();
  55. }
  56. });
  57. }
  58. module.exports = router;