thinkraz-api-sdk
Version:
橡芮科技API开发包
126 lines (121 loc) • 4.13 kB
JavaScript
const request = require('request');
const Promise = require('bluebird');
const validator = require('validator');
const baseAddress = 'http://api.thinkraz.com';
// const baseAddress = 'http://192.168.31.110:8080';
// const baseAddress = 'http://127.0.0.1:8080';
const SdkError = require('./sdkError');
function combineRequestUrl(path) {
path = path.toString().trim();
if (path[0] !== '/') path = `/${path}`;
return `${baseAddress}${path}`;
}
/**
* @description 请求服务器
* @param {Object} headers
*/
let requestServer = function (headers) {
if (headers instanceof Object) {
this.headers = headers;
} else {
throw new Error('SDK headers settings incorrect');
}
this.emitRequest = function (options) {
return new Promise((resolve, reject) => {
request(options, (error, response, body) => {
if (!body) {
body = {};
}
if (typeof body === 'string') {
if (validator.isJSON(body)) {
body = JSON.parse(body);
}
}
if (!error) {
if (response.statusCode === 200 || response.statusCode === 201) {
resolve(body);
} else {
if (typeof body === 'string') {
response.statusCode = 500;
console.error(body);
}
if (response.statusCode === 500) {
reject(new SdkError('Internal server error', 500));
} else {
reject(new SdkError(body.message, response.statusCode, body.code));
}
}
} else {
switch (error.code) {
case 'ETIMEDOUT': {
reject(new SdkError('Request timeout', 0, -1));
}
break;
default: {
//TODO
console.log(error);
reject(new SdkError('Request error occurred', error.code, 0));
}
}
}
});
});
};
};
requestServer.prototype = {
get: function (path, queryObj) {
if (!queryObj) queryObj = {};
let requestUrl = combineRequestUrl(path);
for (let key of Object.keys(queryObj)) {
if (queryObj[key] instanceof Object) {
queryObj[key] = JSON.stringify(queryObj[key]);
}
}
return this.emitRequest({
uri: requestUrl,
method: 'GET',
headers: this.headers,
qs: queryObj,
json: true
});
},
post: function (path, body) {
let requestUrl = combineRequestUrl(path);
if (!body) body = {};
return this.emitRequest({
uri: requestUrl,
method: 'POST',
headers: this.headers,
body: body,
json: true
});
},
put: function (path, body, queryObj) {
if (!queryObj) queryObj = {};
let requestUrl = combineRequestUrl(path);
if (!body) body = {};
return this.emitRequest({
uri: requestUrl,
method: 'PUT',
headers: this.headers,
body: body,
qs: queryObj,
json: true
});
},
del: function (path, body) {
let requestUrl = combineRequestUrl(path);
if (!body) body = {};
return this.emitRequest({
uri: requestUrl,
method: 'DELETE',
headers: this.headers,
body: body,
json: true
});
},
getBaseAddress: function () {
return baseAddress;
}
};
module.exports = requestServer;