Răsfoiți Sursa

修复v1代理接口的post请求间歇性无返回的bug

dotos 8 ani în urmă
părinte
comite
737bf396ac
13 a modificat fișierele cu 183 adăugiri și 122 ștergeri
  1. 1 1
      .avoscloud/apps.json
  2. 1 0
      .gitignore
  3. 16 15
      app.js
  4. 1 0
      bin/www
  5. 3 2
      package.json
  6. 12 9
      routes/ip.js
  7. 12 8
      routes/joke.js
  8. 11 8
      routes/mobile.js
  9. 11 9
      routes/netease.js
  10. 4 18
      routes/test.js
  11. 92 41
      routes/v1.js
  12. 11 8
      routes/weather.js
  13. 8 3
      routes/welcome.js

+ 1 - 1
.avoscloud/apps.json

@@ -1 +1 @@
-{"origin":"z3bnu4iiAfsfAAUxAKaIjNO2-gzGzoHsz"}
+{"bird":"z3bnu4iiAfsfAAUxAKaIjNO2-gzGzoHsz"}

+ 1 - 0
.gitignore

@@ -3,3 +3,4 @@
 node_modules/
 npm-debug.log
 config/.avoscloud/
+.avoscloud/.avoscloud/

+ 16 - 15
app.js

@@ -1,16 +1,12 @@
 var express = require('express');
-var request = require('request');
+var request = require('superagent');
 var path = require('path');
 var favicon = require('serve-favicon');
 var logger = require('morgan');
 var cookieParser = require('cookie-parser');
 var bodyParser = require('body-parser');
+var helmet = require('helmet');
 //var sass = require('node-sass-middleware');
-var moment = require('moment');
-//设置时区
-var timezone = require('moment-timezone');
-//本地化
-moment.locale('zh-cn');
 //Welcome Page
 var welcome = require('./routes/welcome');
 //日志输出
@@ -32,13 +28,13 @@ var test = require('./routes/test');
 
 var app = express();
 //引入LeanCloud
-//var AV = require('leanengine');
+// var AV = require('leanengine');
 // AV.init({
 //     appId: process.env.LEANCLOUD_APP_ID,
 //     appKey: process.env.LEANCLOUD_APP_KEY,
 //     masterKey: process.env.LEANCLOUD_APP_MASTER_KEY
 // });
-//app.use(AV.express());
+// app.use(AV.express());
 app.set('views', path.join(__dirname, 'views'));
 // view engine setup
 app.set('view engine', 'pug');
@@ -49,6 +45,7 @@ app.use(logger('dev'));
 app.use(bodyParser.json());
 app.use(bodyParser.urlencoded({ extended: false }));
 app.use(cookieParser());
+app.use(helmet());
 //配置 sass
 // app.use(sass({
 //     src: __dirname + '/static/sass',
@@ -59,11 +56,17 @@ app.use(cookieParser());
 //静态文件访问路径
 app.use('/static/', express.static(path.join(__dirname, 'static')));
 var i = 0;
+var prevTime = +new Date();
 //每隔3分钟自动请求一次
-setInterval(function() {
-    request('https://bird.ioliu.cn/joke?_detect=' + i++, function(err, response, body) {
-
-    });
+var t = setInterval(function() {
+    var nowTime = +new Date();
+    if (nowTime - prevTime < 3 * 60 * 1000) {
+        //
+    } else {
+        request.get('https://bird.ioliu.cn/joke?_detect=' + i++).end(function(err, response) {
+            prevTime = +new Date();
+        });
+    }
 }, 3 * 60 * 1000);
 
 /***
@@ -74,8 +77,6 @@ app.use(function(req, res, next) {
     res.header("Access-Control-Allow-Origin", "*");
     res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept,Access-Control-Allow-Origin");
     res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");
-    res.header("X-Powered-By", '1.0.0');
-    res.header("Vary", "Origin");
     var protocol = req.protocol;
     var host = req.hostname;
     var ip = req.headers['x-real-ip'] ? req.headers['x-real-ip'] : req.ip.replace(/::ffff:/, '');
@@ -87,7 +88,7 @@ app.use(function(req, res, next) {
         Referer: ref,
         //Protocol: protocol, 
         OriginalUrl: originalUrl,
-        Time: moment().tz('Asia/ShangHai').format('YYYY-MM-DD HH:mm:ss.SSS')
+        Time: new Date().toLocaleString()
     };
     /**
      * 不记录日志和统计的请求:

+ 1 - 0
bin/www

@@ -3,6 +3,7 @@
 /**
  * Module dependencies.
  */
+process.env.TZ = 'Asia/Shanghai';
 
 let app = require('../app');
 let debug = require('debug')('API:server');

+ 3 - 2
package.json

@@ -32,6 +32,7 @@
         "debug": "~2.2.0",
         "express": "~4.13.4",
         "express-generator": "^4.13.4",
+        "helmet": "^2.3.0",
         "leanengine": "^1.2.2",
         "moment": "^2.15.0",
         "moment-timezone": "^0.5.5",
@@ -42,8 +43,8 @@
         "os": "^0.1.1",
         "pug": "^2.0.0-beta6",
         "querystring": "^0.2.0",
-        "request": "^2.74.0",
-        "serve-favicon": "~2.3.0"
+        "serve-favicon": "~2.3.0",
+        "superagent": "^2.3.0"
     },
     "engines": {
         "node": "6.x"

+ 12 - 9
routes/ip.js

@@ -1,5 +1,5 @@
 let express = require('express');
-let request = require('request');
+let request = require('superagent');
 let router = express.Router();
 const base = 'http://apis.juhe.cn/ip/ip2addr?key=28c0a6a5eb9cca3f38bc5877a83c9868';
 router.get('/*', function(req, res, next) {
@@ -23,18 +23,21 @@ function ip2address(req, res, next) {
             message: ''
         }
     };
-    request(url, function(err, response, body) {
+    request.get(url).end(function(err, response) {
+        let body = response.body || response.text;
         if (type !== 'xml') {
-            try {
-                body = JSON.parse(body);
-            } catch (e) {
-                output.status = {
-                    code: -1
-                };
+            if (typeof body === 'string') {
+                try {
+                    body = JSON.parse(body);
+                } catch (e) {
+                    output.status = {
+                        code: -1
+                    };
+                }
             }
             output.data = (body.result && body.result.data ? body.result.data : body.result) || {};
             output.data['ip'] = ip;
-            if (!err && response.statusCode === 200 && body.error_code === 0) {
+            if (!err && response.statusCode === 200) {
                 //
             } else {
                 output.status = {

+ 12 - 8
routes/joke.js

@@ -1,5 +1,5 @@
 let express = require('express');
-let request = require('request');
+let request = require('superagent');
 let router = express.Router();
 const key = '64a40e3c55e88cc8cd66a78d030bddce';
 /**
@@ -67,13 +67,17 @@ function getJOKE(req, res, next, op) {
             message: ''
         }
     };
-    request(url, function(err, response, body) {
-        try {
-            body = JSON.parse(body);
-        } catch (e) {
-            output.status = {
-                code: -1
-            };
+    console.log(url);
+    request.get(url).end(function(err, response) {
+        let body = response.text || response.body;
+        if (typeof body === 'string') {
+            try {
+                body = JSON.parse(body);
+            } catch (e) {
+                output.status = {
+                    code: -1
+                };
+            }
         }
         output.data = (body.result && body.result.data ? body.result.data : body.result) || {};
         if (!err && response.statusCode === 200 && body.error_code === 0) {

+ 11 - 8
routes/mobile.js

@@ -1,5 +1,5 @@
 let express = require('express');
-let request = require('request');
+let request = require('superagent');
 let router = express.Router();
 const base = 'http://apis.juhe.cn/mobile/get?key=9f719ab7014f2cbdc7b394edf70d0f76';
 router.get('/', function(req, res, next) {
@@ -21,14 +21,17 @@ function getMobile(req, res, next) {
             message: ''
         }
     };
-    request(url, function(err, response, body) {
+    request.get(url).end(function(err, response) {
+        let body = response.text || response.body;
         if (type !== 'xml') {
-            try {
-                body = JSON.parse(body);
-            } catch (e) {
-                output.status = {
-                    code: -1
-                };
+            if (typeof body === 'string') {
+                try {
+                    body = JSON.parse(body);
+                } catch (e) {
+                    output.status = {
+                        code: -1
+                    };
+                }
             }
             output.data = (body.result && body.result.data ? body.result.data : body.result) || {};
             if (!err && response.statusCode === 200 && body.error_code === 0) {

+ 11 - 9
routes/netease.js

@@ -1,5 +1,5 @@
 var express = require('express');
-var request = require('request');
+var request = require('superagent');
 var router = express.Router();
 
 /* GET users listing. */
@@ -30,16 +30,18 @@ router.get('/', function(req, res, next) {
 });
 
 function netease_http(url, next, callback) {
-    var options = {
-        url: url,
-        headers: {
-            Cookie: 'appver=1.5.0.75771;',
-            referer: 'http://music.163.com'
+    let headers = {
+        Cookie: 'appver=1.5.0.75771;',
+        referer: 'http://music.163.com'
+    }
+    request.get(url).set(headers).end(function(err, res) {
+        let body = res.text || res.body;
+        if (typeof body === 'string') {
+            try {
+                body = JSON.parse(body);
+            } catch (e) {}
         }
-    };
-    request(options, function(err, res, body) {
         if (!err && res.statusCode == 200) {
-            body = JSON.parse(body);
             callback && callback(body);
         } else {
             var error = new Error(err);

+ 4 - 18
routes/test.js

@@ -1,30 +1,16 @@
 var express = require('express');
-var request = require('request');
+var request = require('superagent');
 var router = express.Router();
 
 /* GET home page. */
 router.get('/', function(req, res, next) {
-    //res.render('test', { title: 'Express' });
-    // request('https://bird.ioliu.cn/netease/?playlist_id=10998986', function(err, resp, body) {
-    //     console.log(body);
-    //     res.send(body);
-    // });
-    // var mydata = {
-    //     url: 'CSMBP/data/service/discount/getMinPrice.do?type=MOBILE&token=E0xywTTmPMVVPd5B8u4cPvBMW2B4ZKPwpZ194hyuI%2FoDWG35pqOxAw%3D%3D&lang=zh',
-    //     page: {
-    //         "page": {
-    //             "INTER": "N",
-    //             "CHANNEL": "Mobile"
-    //         }
-    //     },
-    //     pagebase: 'https://m.csair.com'
-    // };
     var mydata = {
         page: 1,
-        pagesize: 3
+        pagesize: 6
     };
 
-    request.post('https://bird.ioliu.cn/joke/', { form: mydata }, function(err, resp, body) {
+    request.post('https://bird.ioliu.cn/joke/').send(mydata).end(function(err, resp) {
+        let body = resp.text || resp.body;
         res.send(body);
     });
 });

+ 92 - 41
routes/v1.js

@@ -1,16 +1,16 @@
 var express = require('express');
-var request = require('request');
+var request = require('superagent');
 var router = express.Router();
 
 router.get('/*', function(req, res, next) {
-    getJSON(req, res, next);
+    getJSON(req, res, next, 'get');
 });
 
 router.post('/*', function(req, res, next) {
-    getJSON(req, res, next);
+    getJSON(req, res, next, 'post');
 });
 
-function getJSON(req, res, next) {
+function getJSON(req, res, next, method) {
     let ip = req.ip.replace(/\:\:ffff\:/, '').replace(/\:\:1/, '127.0.0.1');
     let host = req.hostname;
     let protocol = req.protocol;
@@ -28,46 +28,97 @@ function getJSON(req, res, next) {
             massage: ''
         }
     };
+    method = method.toUpperCase();
     if (url) {
-        if (/\?url\=/.test(originalUrl)) {
-            url = originalUrl.split('url=')[1];
-        }
+        let _temp = {};
+        switch (method) {
+            case 'GET':
+                // get request
+                if (/\?url\=/.test(originalUrl)) {
+                    url = originalUrl.split('url=')[1];
+                }
 
-        if (params) {
-            let temp = [];
-            for (let i in params) {
-                temp.push('&' + i + '=' + encodeURI(params[i]));
-            }
-            url += temp.join('');
-        }
-        url = url.indexOf('?') === -1 ? url.replace(/\&/, '?') : url;
-        url = /^(http|https)\:\/\//.test(url) ? url : 'http://' + url;
-        url = url.replace(/\&callback\=(\w+)/, '');
-        request(url, function(err, response, body) {
-            try {
-                body = JSON.parse(body);
-            } catch (e) {
-                output.status = {
-                    code: -1
-                };
-            }
-            if (!err && response.statusCode == 200) {
-                output = body;
-            } else {
-                output = {
-                    data: {},
-                    status: {
-                        code: -1,
-                        message: err || 'Something bad happend.'
+                if (params) {
+                    for (let i in params) {
+                        _temp[i] = encodeURI(params[i]);
                     }
-                };
-            }
-            if (callback) {
-                res.jsonp(output);
-            } else {
-                res.json(output);
-            }
-        });
+                }
+                url = url.indexOf('?') === -1 ? url.replace(/\&/, '?') : url;
+                url = /^(http|https)\:\/\//.test(url) ? url : 'http://' + url;
+                url = url.replace(/\&callback\=(\w+)/, '');
+                request
+                    .get(url)
+                    .query(_temp)
+                    .end(function(err, response) {
+                        let body = response.body || response.text;
+                        if (typeof body === 'string') {
+                            try {
+                                body = JSON.parse(body);
+                            } catch (e) {
+                                output.status = {
+                                    code: -1
+                                };
+                            }
+                        }
+                        if (!err && response.statusCode == 200) {
+                            output = body;
+                        } else {
+                            output = {
+                                data: {},
+                                status: {
+                                    code: -1,
+                                    message: err || 'Something bad happend.'
+                                }
+                            };
+                        }
+                        if (callback) {
+                            res.jsonp(output);
+                        } else {
+                            res.json(output);
+                        }
+                    });
+                break;
+            default:
+                // post request
+                if (params) {
+                    for (let i in params) {
+                        _temp[i] = params[i];
+                    }
+                }
+                request
+                    .post(url)
+                    .type('form')
+                    .send(_temp)
+                    .end(function(err, response) {
+                        let body = response.body || response.text;
+                        if (typeof body === 'string') {
+                            try {
+                                body = JSON.parse(body);
+                            } catch (e) {
+                                output.status = {
+                                    code: -1
+                                };
+                            }
+                        }
+                        if (!err && response.statusCode == 200) {
+                            output = body;
+                        } else {
+                            output = {
+                                data: {},
+                                status: {
+                                    code: -1,
+                                    message: err || 'Something bad happend.'
+                                }
+                            };
+                        }
+                        if (callback) {
+                            res.jsonp(output);
+                        } else {
+                            res.json(output);
+                        }
+                    });
+                break;
+        }
     } else {
         if (callback) {
             res.jsonp(output);

+ 11 - 8
routes/weather.js

@@ -1,5 +1,5 @@
 let express = require('express');
-let request = require('request');
+let request = require('superagent');
 let qs = require('querystring');
 let router = express.Router();
 const base = 'http://op.juhe.cn/onebox/weather/query?key=e0540a109f5a73e9df2981cdeb9d106f';
@@ -23,14 +23,17 @@ function getMobile(req, res, next) {
             message: ''
         }
     };
-    request(url, function(err, response, body) {
+    request.get(url).end(function(err, response) {
+        let body = response.body || response.text;
         if (type !== 'xml') {
-            try {
-                body = JSON.parse(body);
-            } catch (e) {
-                output.status = {
-                    code: -1
-                };
+            if (typeof body === 'string') {
+                try {
+                    body = JSON.parse(body);
+                } catch (e) {
+                    output.status = {
+                        code: -1
+                    };
+                }
             }
             output.data = (body.result && body.result.data ? body.result.data : body.result) || {};
             if (!err && response.statusCode === 200 && body.error_code === 0) {

+ 8 - 3
routes/welcome.js

@@ -1,5 +1,5 @@
 let express = require('express');
-let request = require('request');
+let request = require('superagent');
 let config = require('../configs/config').site;
 let router = express.Router();
 
@@ -22,9 +22,14 @@ router.get('/', function(req, res, next) {
 });
 
 function ip2addr(ip, callback) {
-    request('http://apis.juhe.cn/ip/ip2addr?ip=' + ip + '&key=28c0a6a5eb9cca3f38bc5877a83c9868', function(err, res, body) {
+    request.get('http://apis.juhe.cn/ip/ip2addr?ip=' + ip + '&key=28c0a6a5eb9cca3f38bc5877a83c9868').end(function(err, res) {
+        let body = res.body || res.text;
         if (!err && res.statusCode == 200) {
-            body = JSON.parse(body);
+            if (typeof body === 'string') {
+                try {
+                    body = JSON.parse(body);
+                } catch (e) {}
+            }
             callback && callback(body.result);
         } else {
             console.log(' / request info:' + err);