UNPKG

thinkraz-api-sdk

Version:

橡芮科技API开发包

126 lines (121 loc) 4.13 kB
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;