Эх сурвалжийг харах

重构代码、优化请求逻辑、修复请求错误

Dotos 8 жил өмнө
parent
commit
5ae8c3fe45
7 өөрчлөгдсөн 164 нэмэгдсэн , 177 устгасан
  1. 4 1
      app.js
  2. 52 0
      routes/ip.js
  3. 39 63
      routes/joke.js
  4. 28 42
      routes/mobile.js
  5. 5 22
      routes/v1.js
  6. 30 43
      routes/weather.js
  7. 6 6
      routes/welcome.js

+ 4 - 1
app.js

@@ -15,6 +15,8 @@ moment.locale('zh-cn');
 var welcome = require('./routes/welcome');
 //日志输出
 var logUtils = require('./utils/logUtils');
+//查询ip
+var ip = require('./routes/ip');
 //网易云音乐
 var netease = require('./routes/netease');
 //JsonBird version 1.0
@@ -32,7 +34,7 @@ var app = express();
 app.set('views', path.join(__dirname, 'views'));
 // view engine setup
 app.set('view engine', 'pug');
-app.enable('trust proxy');
+//app.enable('trust proxy');
 // uncomment after placing your favicon in /public
 //app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
 app.use(logger('dev'));
@@ -102,6 +104,7 @@ app.all('*', function(req, res, next) {
 
 app.use('/', welcome);
 app.use('/test', test);
+app.use('/ip', ip);
 app.use('/v1', v1);
 app.use('/netease', netease);
 app.use('/joke', joke);

+ 52 - 0
routes/ip.js

@@ -0,0 +1,52 @@
+let express = require('express');
+let request = require('request');
+let qs = require('querystring');
+let router = express.Router();
+const base = 'http://apis.juhe.cn/ip/ip2addr?key=28c0a6a5eb9cca3f38bc5877a83c9868';
+router.get('/*', function(req, res, next) {
+    ip2address(req, res, next);
+});
+router.post('/*', function(req, res, next) {
+    ip2address(req, res, next);
+});
+/**
+ * 获取IP地址所对应的地区
+ */
+function ip2address(req, res, next) {
+    let ip = req.query.ip || req.body.ip || req.ip.replace(/\:\:1/, '127.0.0.1');
+    let callback = req.query.callback || req.body.callback;
+    let type = req.query.type || req.body.type;
+    let url = base + '&ip=' + ip + '&dtype=' + type;
+    request(url, function(err, response, body) {
+        if (type !== 'xml') {
+            body = JSON.parse(body);
+            let output = {
+                data: (body.result && body.result.data ? body.result.data : body.result) || {},
+                status: {
+                    code: 200,
+                    message: ''
+                }
+            };
+            if (!err && response.statusCode === 200 && body.error_code === 0) {
+                //
+            } else {
+                output.status = {
+                    code: -1,
+                    message: err || body.reason || 'Something bad happend.'
+                };
+            }
+            if (callback) {
+                return res.jsonp(output);
+            } else {
+                return res.json(output);
+            }
+        } else {
+            res.header('content-type', 'text/xml;charset=utf-8');
+            return res.send(body);
+        }
+
+    });
+}
+
+
+module.exports = router;

+ 39 - 63
routes/joke.js

@@ -1,58 +1,30 @@
-var express = require('express');
-var request = require('request');
-var router = express.Router();
-// 创建 application/x-www-form-urlencoded 编码解析
-var bodyParser = require('body-parser');
-var urlencodedParser = bodyParser.urlencoded({ extended: false });
-var params = {
-    key: '64a40e3c55e88cc8cd66a78d030bddce',
-    method: 'get',
-    page: 1,
-    pagesize: 1,
-    sort: '',
-    time: '',
-    type: ''
-};
-
+let express = require('express');
+let request = require('request');
+let router = express.Router();
+const key = '64a40e3c55e88cc8cd66a78d030bddce';
 /**
  * Get 请求
  */
 router.get('/', function(req, res, next) {
-    params.method = 'get';
-    params.page = req.query.page || 1;
-    params.pagesize = req.query.pagesize || 1;
-    params.sort = req.query.sort || '';
-    params.time = req.query.time || '';
-    params.type = req.query.type;
     getJOKE(req, res, next);
 });
 /**
  * 随机获取
  */
 router.get('/rand', function(req, res, next) {
-    params.method = 'get';
-    params.type = req.query.type || 'pic';
     getJOKE(req, res, next, 'rand');
 });
 
 /**
  * Post 请求
  */
-router.post('/', urlencodedParser, function(req, res, next) {
-    params.method = 'post';
-    params.page = req.body.page || 1;
-    params.pagesize = req.body.pagesize || 1;
-    params.sort = req.body.sort || '';
-    params.time = req.body.time || '';
-    params.type = req.body.type;
+router.post('/', function(req, res, next) {
     getJOKE(req, res, next);
 });
 /**
  * 随机获取 
  */
-router.post('/rand', urlencodedParser, function(req, res, next) {
-    params.method = 'post';
-    params.type = req.body.type || 'pic';
+router.post('/rand', function(req, res, next) {
     getJOKE(req, res, next, 'rand');
 });
 
@@ -60,52 +32,56 @@ router.post('/rand', urlencodedParser, function(req, res, next) {
  * 统一的请求
  */
 function getJOKE(req, res, next, op) {
-    var url = '';
+    let page = req.query.page || req.body.page || 1;
+    let pagesize = req.query.pagesize || req.body.pagesize || 1;
+    let sort = req.query.sort || req.body.sort;
+    let time = req.query.time || req.body.time;
+    let type = req.query.type || req.body.type || 'pic';
+    let callback = req.query.callback || req.body.callback;
+    let url = '';
     if (!!op && op === 'rand') {
-        if (params.type !== 'pic') {
-            params.type = null;
+        if (type !== 'pic') {
+            type = null;
         }
-        url = "http://v.juhe.cn/joke/randJoke.php?key=" + params.key;
-        if (!!params.type) {
-            url += "&type=" + params.type;
+        url = "http://v.juhe.cn/joke/randJoke.php?key=" + key;
+        if (!!type) {
+            url += "&type=" + type;
         }
     } else {
         url = "http://japi.juhe.cn/joke/";
-        if (!!params.type && params.type === 'text') {
+        if (!!type && type === 'text') {
             url += "content/text.from?key=";
         } else {
             url += "img/text.from?key=";
         }
-        url += params.key + "&page=" + params.page + "&pagesize=" + params.pagesize;
-        if (!!params.sort && !!params.time) {
-            url += "&sort=" + params.sort + "&time=" + params.time;
+        url += key + "&page=" + page + "&pagesize=" + pagesize;
+        if (!!sort && !!time) {
+            url += "&sort=" + sort + "&time=" + time;
             url = url.replace(/text/, 'list');
         }
     }
+    console.log(url)
     request(url, function(err, response, body) {
         body = JSON.parse(body);
-        if (!err && response.statusCode === 200 && body.error_code === 0) {
-            var output = {
-                data: body.result.data || body.result,
-                status: {
-                    code: 200,
-                    message: ''
-                }
-            };
-            if (req.query.callback) {
-                return res.jsonp(output);
-            } else {
-                return res.json(output);
+        let output = {
+            data: (body.result && body.result.data ? body.result.data : body.result) || {},
+            status: {
+                code: 200,
+                message: ''
             }
+        };
+        if (!err && response.statusCode === 200 && body.error_code === 0) {
+            //
         } else {
-            var error = {
-                data: {},
-                status: {
-                    code: -1,
-                    message: body.reason
-                }
+            output.status = {
+                code: -1,
+                message: err || body.reason || 'Something bad happend.'
             };
-            res.json(error);
+        }
+        if (callback) {
+            return res.jsonp(output);
+        } else {
+            return res.json(output);
         }
     });
 }

+ 28 - 42
routes/mobile.js

@@ -1,59 +1,45 @@
-var express = require('express');
-var request = require('request');
-var router = express.Router();
-// 创建 application/x-www-form-urlencoded 编码解析
-var bodyParser = require('body-parser');
-var urlencodedParser = bodyParser.urlencoded({ extended: false });
-var key = "9f719ab7014f2cbdc7b394edf70d0f76";
-var base = 'http://apis.juhe.cn/mobile/get?key=' + key;
-var type = '';
-var callback = '';
-var phone = '';
+let express = require('express');
+let request = require('request');
+let router = express.Router();
+const base = 'http://apis.juhe.cn/mobile/get?key=9f719ab7014f2cbdc7b394edf70d0f76';
 router.get('/', function(req, res, next) {
-    phone = req.query.phone;
-    type = req.query.type === 'xml' ? 'xml' : '';
-    callback = req.query.callback;
     getMobile(req, res, next);
 });
-router.post('/', urlencodedParser, function(req, res, next) {
-    phone = req.body.phone;
-    type = req.body.type === 'xml' ? 'xml' : '';
-    callback = req.body.callback;
+router.post('/', function(req, res, next) {
     getMobile(req, res, next);
 });
 
 function getMobile(req, res, next) {
-    var url = !!type ? base + '&dtype=' + type : base;
-    url += '&phone=' + phone;
+    let type = req.query.type || req.body.type;
+    let phone = req.query.phone || req.body.phone;
+    let callback = req.query.callback || req.body.callback;
+    let url = base + '&phone=' + phone + '&dtype=' + type;
     request(url, function(err, response, body) {
-        if (!type) {
+        if (type !== 'xml') {
             body = JSON.parse(body);
-            if (!err && response.statusCode === 200 && body.error_code === 0) {
-                var output = {
-                    data: body.result.data || body.result,
-                    status: {
-                        code: 200,
-                        message: ''
-                    }
-                };
-                if (callback) {
-                    return res.jsonp(output);
-                } else {
-                    return res.json(output);
+            let output = {
+                data: (body.result && body.result.data ? body.result.data : body.result) || {},
+                status: {
+                    code: 200,
+                    message: ''
                 }
+            };
+            if (!err && response.statusCode === 200 && body.error_code === 0) {
+                //
             } else {
-                var error = {
-                    data: {},
-                    status: {
-                        code: -1,
-                        message: body.reason
-                    }
+                output.status = {
+                    code: -1,
+                    message: err || body.reason || 'Something bad happend.'
                 };
-                res.json(error);
+            }
+            if (callback) {
+                return res.jsonp(output);
+            } else {
+                return res.json(output);
             }
         } else {
-            res.header('content-type', 'text/xml');
-            res.send(body);
+            res.header('content-type', 'text/xml; charset=utf-8');
+            return res.send(body);
         }
     });
 }

+ 5 - 22
routes/v1.js

@@ -2,11 +2,6 @@ var express = require('express');
 var request = require('request');
 var router = express.Router();
 
-// router.all('*', function(req, res, next) {
-//     res.header("Content-Type", "application/json;charset=utf-8");
-//     next();
-// });
-
 router.get('/*', function(req, res, next) {
     var host = req.hostname;
     var protocol = req.protocol;
@@ -58,34 +53,22 @@ router.post('/*', function(req, res, next) {
 function getJSON(url, next, callback) {
     request(url, function(err, res, body) {
         body = JSON.parse(body);
+        console.log(err);
         if (!err && res.statusCode == 200) {
             callback && callback(body);
         } else {
             var error = {
-                data: {},
+                data: body,
                 status: {
                     code: -1,
-                    message: body.reason
+                    message: err || body.reason || 'Something bad happened.'
                 }
             };
-            res.json(error);
+            next(error);
         }
     });
 }
 
-/**
- * 获取IP地址所对应的地区
- */
-function ip2address(ip, callback) {
-    request('http://apis.juhe.cn/ip/ip2addr?ip=' + ip + '&key=28c0a6a5eb9cca3f38bc5877a83c9868', function(err, res, body) {
-        body = JSON.parse(body);
-        if (!err && res.statusCode == 200 && body['error_code'] !== 200102) {
-            callback && callback(body['result']);
-        } else {
-            console.log(' / request info:' + err);
-            callback && callback();
-        }
-    });
-}
+
 
 module.exports = router;

+ 30 - 43
routes/weather.js

@@ -1,60 +1,47 @@
-var express = require('express');
-var request = require('request');
-var qs = require('querystring');
-var router = express.Router();
-// 创建 application/x-www-form-urlencoded 编码解析
-var bodyParser = require('body-parser');
-var urlencodedParser = bodyParser.urlencoded({ extended: false });
-var key = "e0540a109f5a73e9df2981cdeb9d106f";
-var base = 'http://op.juhe.cn/onebox/weather/query?key=' + key;
-var type = '';
-var callback = '';
-var city = '';
-router.get('/', function(req, res, next) {
-    city = req.query.city;
-    type = req.query.type === 'xml' ? 'xml' : '';
-    callback = req.query.callback;
+let express = require('express');
+let request = require('request');
+let qs = require('querystring');
+let router = express.Router();
+const base = 'http://op.juhe.cn/onebox/weather/query?key=e0540a109f5a73e9df2981cdeb9d106f';
+router.get('/*', function(req, res, next) {
     getMobile(req, res, next);
 });
-router.post('/', urlencodedParser, function(req, res, next) {
-    city = req.body.city;
-    type = req.body.type === 'xml' ? 'xml' : '';
+router.post('/*', function(req, res, next) {
     getMobile(req, res, next);
 });
 
 function getMobile(req, res, next) {
+    let city = req.query.city || req.body.city;
     city = !!city ? qs.escape(city) : '';
-    var url = type === 'xml' ? base + '&dtype=xml' : base;
-    url += '&cityname=' + city;
+    let type = (req.query.type || req.body.type) === 'xml' ? 'xml' : '';
+    let callback = req.query.callback || req.body.callback;
+    let url = base + '&cityname=' + city + '&dtype=' + type;
     request(url, function(err, response, body) {
-        if (!type) {
+        if (type !== 'xml') {
             body = JSON.parse(body);
-            if (!err && response.statusCode === 200 && body.error_code === 0) {
-                var output = {
-                    data: body.result.data || body.result,
-                    status: {
-                        code: 200,
-                        message: ''
-                    }
-                };
-                if (callback) {
-                    return res.jsonp(output);
-                } else {
-                    return res.json(output);
+            let output = {
+                data: (body.result && body.result.data ? body.result.data : body.result) || {},
+                status: {
+                    code: 200,
+                    message: ''
                 }
+            };
+            if (!err && response.statusCode === 200 && body.error_code === 0) {
+                //
             } else {
-                var error = {
-                    data: {},
-                    status: {
-                        code: -1,
-                        message: body.reason
-                    }
+                output.status = {
+                    code: -1,
+                    message: err || body.reason || 'Something bad happend.'
                 };
-                res.json(error);
+            }
+            if (callback) {
+                return res.jsonp(output);
+            } else {
+                return res.json(output);
             }
         } else {
-            res.header('content-type', 'text/xml');
-            res.send(body);
+            res.header('content-type', 'text/xml; charset=utf-8');
+            return res.send(body);
         }
     });
 }

+ 6 - 6
routes/welcome.js

@@ -1,13 +1,13 @@
-var express = require('express');
-var request = require('request');
-var config = require('../configs/config').site;
-var router = express.Router();
+let express = require('express');
+let request = require('request');
+let config = require('../configs/config').site;
+let router = express.Router();
 
 /* GET home page. */
 router.get('/', function(req, res, next) {
-    var ip = req.ip;
+    let ip = req.ip;
     ip2addr(ip, function(data) {
-        var params = {
+        let params = {
             head: config.title,
             title: 'Welcome | ' + config.title + ' - ' + config.description,
             description: config.description