UNPKG

tb-vue-http

Version:
228 lines (201 loc) 6.79 kB
export default class HttpService { static DEFAULT_HEADERS = { 'Content-type': 'application/json' } constructor(url, domainHeaders) { this.url = url this.domainHeaders = domainHeaders } isFunction(value) { return Object.prototype.toString.call(value) == '[object Function]'; } get(path, requestHeaders) { return new Promise((resolve, reject) => { if (requestHeaders == null) { requestHeaders = Object.assign({}, HttpService.DEFAULT_HEADERS) } let request = this.createRequest('GET', this.url + path, [this.domainHeaders, requestHeaders]) request.onreadystatechange = function() { if (this.readyState == 4 && this.status < 300) { if (request.responseText) { if (requestHeaders['Content-type'] == 'application/json') { resolve(JSON.parse(request.responseText)) } else { resolve(request.responseText) } } else { resolve(request.response) } } if (this.readyState == 4 && 400 <= this.status) { if (request.responseText) { if (requestHeaders['Content-type'] == 'application/json') { reject(JSON.parse(request.responseText)) } else { reject(request.responseText) } } else { reject(request.response) } } } request.send() }) } post(path, data, requestHeaders) { return new Promise((resolve, reject) => { if (requestHeaders == null) { requestHeaders = Object.assign({}, HttpService.DEFAULT_HEADERS) } let request = this.createRequest('POST', this.url + path, [this.domainHeaders, requestHeaders]) request.onreadystatechange = function() { if (this.readyState == 4 && this.status < 300) { if (request.responseText) { if (requestHeaders['Content-type'] == 'application/json') { resolve(JSON.parse(request.responseText)) } else { resolve(request.responseText) } } else { resolve(request.response) } } if (this.readyState == 4 && 400 <= this.status) { if (request.responseText) { if (requestHeaders['Content-type'] == 'application/json') { reject(JSON.parse(request.responseText)) } else { reject(request.responseText) } } else { reject(request.response) } } } let payload = requestHeaders['Content-type'] == 'application/json' ? JSON.stringify(data) : data request.send(payload) }) } put(path, data, requestHeaders) { return new Promise((resolve, reject) => { if (requestHeaders == null) { requestHeaders = Object.assign({}, HttpService.DEFAULT_HEADERS) } let request = this.createRequest('PUT', this.url + path, [this.domainHeaders, requestHeaders]) request.onreadystatechange = function() { if (this.readyState == 4 && this.status < 300) { if (request.responseText) { if (requestHeaders['Content-type'] == 'application/json') { resolve(JSON.parse(request.responseText)) } else { resolve(request.responseText) } } else { resolve(request.response) } } if (this.readyState == 4 && 400 <= this.status) { if (request.responseText) { if (requestHeaders['Content-type'] == 'application/json') { reject(JSON.parse(request.responseText)) } else { reject(request.responseText) } } else { reject(request.response) } } } let payload = requestHeaders['Content-type'] == 'application/json' ? JSON.stringify(data) : data request.send(payload) }) } del(path, requestHeaders) { return new Promise((resolve, reject) => { if (requestHeaders == null) { requestHeaders = Object.assign({}, HttpService.DEFAULT_HEADERS) } let request = this.createRequest('DELETE', this.url + path, [this.domainHeaders, requestHeaders]) request.onreadystatechange = function() { if (this.readyState == 4 && this.status < 300) { if (request.responseText) { if (requestHeaders['Content-type'] == 'application/json') { resolve(JSON.parse(request.responseText)) } else { resolve(request.responseText) } } else { resolve(request.response) } } if (this.readyState == 4 && 400 <= this.status) { if (request.responseText) { if (requestHeaders['Content-type'] == 'application/json') { reject(JSON.parse(request.responseText)) } else { reject(request.responseText) } } else { reject(request.response) } } } request.send() }) } request(method, url, headersList, payload) { return new Promise((resolve, reject) => { if (!headersList) { headersList = [] } let request = this.createRequest(method, this.url + path, headersList) request.onreadystatechange = function() { if (this.readyState == 4 && this.status < 300) { if (request.responseText) { if (requestHeaders['Content-type'] == 'application/json') { resolve(JSON.parse(request.responseText)) } else { resolve(request.responseText) } } else { resolve(request.response) } } if (this.readyState == 4 && 400 <= this.status) { if (request.responseText) { if (requestHeaders['Content-type'] == 'application/json') { reject(JSON.parse(request.responseText)) } else { reject(request.responseText) } } else { reject(request.response) } } } if (payload) { request.send(payload) } else { request.send() } }) } createRequest(method, url, headersList) { let request = new XMLHttpRequest() request.open(method, url, true) this.addHeaders(request, headersList) return request } addHeaders(request, headersList) { for (let headers of headersList) { for (let key in headers) { let value = headers[key] if (this.isFunction(value)) { request.setRequestHeader(key, value()) } else { request.setRequestHeader(key, value) } } } } }