ip.js 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. let express = require('express');
  2. let request = require('request');
  3. let qs = require('querystring');
  4. let router = express.Router();
  5. const base = 'http://apis.juhe.cn/ip/ip2addr?key=28c0a6a5eb9cca3f38bc5877a83c9868';
  6. router.get('/*', function(req, res, next) {
  7. ip2address(req, res, next);
  8. });
  9. router.post('/*', function(req, res, next) {
  10. ip2address(req, res, next);
  11. });
  12. /**
  13. * 获取IP地址所对应的地区
  14. */
  15. function ip2address(req, res, next) {
  16. let ip = req.query.ip || req.body.ip || req.ip.replace(/\:\:1/, '127.0.0.1');
  17. let callback = req.query.callback || req.body.callback;
  18. let type = req.query.type || req.body.type;
  19. let url = base + '&ip=' + ip + '&dtype=' + type;
  20. let output = {
  21. data: {},
  22. status: {
  23. code: 200,
  24. message: ''
  25. }
  26. };
  27. request(url, function(err, response, body) {
  28. if (type !== 'xml') {
  29. try {
  30. body = JSON.parse(body);
  31. } catch (e) {
  32. output.status = {
  33. code: -1
  34. };
  35. }
  36. output.data = (body.result && body.result.data ? body.result.data : body.result) || {};
  37. output.data['ip'] = ip;
  38. if (!err && response.statusCode === 200 && body.error_code === 0) {
  39. //
  40. } else {
  41. output.status = {
  42. code: -1,
  43. message: err || body.reason || 'Something bad happend.'
  44. };
  45. }
  46. if (callback) {
  47. return res.jsonp(output);
  48. } else {
  49. return res.json(output);
  50. }
  51. } else {
  52. res.header('content-type', 'text/xml;charset=utf-8');
  53. return res.send(body);
  54. }
  55. });
  56. }
  57. module.exports = router;