ip.js 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. var express = require('express');
  2. var request = require('superagent');
  3. var router = express.Router();
  4. var base = 'http://apis.juhe.cn/ip/ip2addr?key=28c0a6a5eb9cca3f38bc5877a83c9868';
  5. //var cookie = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36' };
  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. var ip = req.query.ip || req.body.ip || req.headers['x-real-ip'] || req.ip.replace(/\:\:1/, '127.0.0.1');
  17. var callback = req.query.callback || req.body.callback;
  18. var type = req.query.type || req.body.type;
  19. var url = base + '&ip=' + ip;
  20. if (type) {
  21. url += '&dtype=' + type;
  22. }
  23. var output = {
  24. data: {},
  25. status: {
  26. code: 200,
  27. message: ''
  28. }
  29. };
  30. request.get(url).end(function(err, response) {
  31. var body = {};
  32. if (response && response.text) {
  33. body = response.text;
  34. } else if (response && response.body) {
  35. body = response.body;
  36. }
  37. if (type !== 'xml') {
  38. if (typeof body === 'string') {
  39. try {
  40. body = JSON.parse(body);
  41. } catch (e) {
  42. output.status = {
  43. code: -1
  44. };
  45. }
  46. }
  47. output.data = (body.result && body.result.data ? body.result.data : body.result) || {};
  48. output.data['ip'] = ip;
  49. if (!err && response.status === 200) {
  50. //
  51. } else {
  52. output.status = {
  53. code: -1,
  54. message: err || body.reason || 'Something bad happend.'
  55. };
  56. }
  57. if (callback) {
  58. return res.jsonp(output);
  59. } else {
  60. return res.json(output);
  61. }
  62. } else {
  63. res.header('content-type', 'text/xml;charset=utf-8');
  64. return res.send(body);
  65. }
  66. });
  67. }
  68. module.exports = router;