v1.js 2.6 KB

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