UNPKG

sensecap

Version:

## Install ``` npm install sensecap --save ```

138 lines (133 loc) 4.5 kB
var request = require('request'); // var Region = require('../sensecap'); var FastRateLimit = require("fast-ratelimit").FastRateLimit; var logger = require('../utils/loggerUtil') var messageLimiter = new FastRateLimit({ threshold : 1, // available tokens over timespan ttl : 1 // time-to-live value of token bucket (in seconds) }); function BaseRequest(options) { this.region = options.region; this.user = options.accessKeyId; this.password = options.accessKeySecret; switch (this.region) { // case Region.SENSECAP_CN: // this.host = 'https://sensecap.seeed.cn/openapi'; // break; // case Region.SENSECAP_CC: // this.host = 'https://sensecap.seeed.cc/openapi'; // break; // case Region.SENSECAP_DEV: // this.host = 'http://sensecapv1.seeed.cc/openapi'; // break; case 1: this.host = 'https://sensecap.seeed.cn/openapi'; break; case 2: this.host = 'https://sensecap.seeed.cc/openapi'; break; case 3: this.host = 'http://sensecapv1.seeed.cc/openapi'; break; default: this.host = 'https://sensecap.seeed.cn/openapi'; break; } } BaseRequest.prototype = { get: function (url, qs, callback) { var that = this; if (messageLimiter.consumeSync(url)) { var time = new Date().valueOf(); request({ url: url, method: 'GET', baseUrl: this.host, json: true, headers: { 'content-type': 'application/x-www-form-urlencoded; charset=utf-8' }, qs: qs, auth: { user: this.user, password: this.password } }, function (error, response, body) { logger.log(url + ' use time: ' + (new Date().valueOf() - time)) callback(that.errorHandler(error, body), body) }) } else { logger.warn('limit now, retry after 1s,' + url) setTimeout(function (){ that.get(url, qs, callback) }, 1000) } }, post: function (url, body, qs, callback) { var that = this; if (messageLimiter.consumeSync(url)) { var time = new Date().valueOf(); request({ url: url, method: 'POST', baseUrl: this.host, json: true, headers: { 'content-type': 'application/json; charset=utf-8' }, body: body || {}, qs: qs, auth: { user: this.user, password: this.password } },function (error, response, body) { logger.log(url + ' use time: ' + (new Date().valueOf() - time)) callback(that.errorHandler(error, body), body) }) } else { logger.warn('limit now, retry after 1s,' + url) setTimeout(function (){ that.get(url, qs, callback) }, 1000) } }, baseGet: function (url, callback) { var that = this; if (messageLimiter.consumeSync(url)) { var time = new Date().valueOf(); request({ url: url, method: 'GET', json: true, gzip: true, encoding: null, //设置encoding }, function (error, response, body) { logger.log(url + ' use time: ' + (new Date().valueOf() - time)) callback(that.errorHandler(error, body), body) }) } else { logger.warn('limit now, retry after 1s,' + url) setTimeout(function (){ that.get(url, qs, callback) }, 1000) } }, errorHandler: function(error, body) { var err if (error) { err = {} err.code = 400; err.msg = error.toString(); } else { if (body && body.code != 0) { err = {} err.code = 500; err.msg = body.msg + ',code: ' + body.code; } } // logger.log(err) return err; } }; module.exports = BaseRequest;