sensecap
Version:
## Install ``` npm install sensecap --save ```
138 lines (133 loc) • 4.5 kB
JavaScript
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;