v1.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  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.replace(/::ffff:/, '');
  13. if (originalUrl === /v1/) {
  14. ip2address(ip, function(data) {
  15. var output = {
  16. data: {
  17. IP: ip,
  18. info: 'Please Set URL Like This: ' + protocol + '://' + host + '/v1/?url=http[s]://YourWantProxyUrl.com'
  19. },
  20. status: {
  21. code: 200,
  22. message: ''
  23. }
  24. };
  25. if (data) {
  26. output['data']['Location'] = data.area + data.location;
  27. }
  28. return res.send(output);
  29. });
  30. } else {
  31. var url = originalUrl.replace('/v1/?url=', '');
  32. url = url.indexOf('?') === -1 ? url.replace('&', '?') : url;
  33. url = url.indexOf('http://') === -1 ? 'http://' + url : url;
  34. getJSON(url, next, function(data) {
  35. var output = {
  36. data: JSON.parse(data),
  37. status: {
  38. code: 200,
  39. message: ''
  40. }
  41. };
  42. if (req.query.callback) {
  43. return res.jsonp(output);
  44. } else {
  45. return res.send(output);
  46. }
  47. });
  48. }
  49. });
  50. function getJSON(url, next, callback) {
  51. request(url, function(err, res, body) {
  52. if (!err && res.statusCode == 200) {
  53. callback && callback(body);
  54. } else {
  55. var error = new Error(err);
  56. error.status = 404;
  57. next(error);
  58. }
  59. });
  60. }
  61. /**
  62. * 获取IP地址所对应的地区
  63. */
  64. function ip2address(ip, callback) {
  65. request('http://apis.juhe.cn/ip/ip2addr?ip=' + ip + '&key=28c0a6a5eb9cca3f38bc5877a83c9868', function(err, res, body) {
  66. body = JSON.parse(body);
  67. if (!err && res.statusCode == 200 && body['error_code'] !== 200102) {
  68. callback && callback(body['result']);
  69. } else {
  70. console.log(' / request info:' + err);
  71. callback && callback();
  72. }
  73. });
  74. }
  75. module.exports = router;