tb-vue-http
Version:
A Vue http-plugin
228 lines (201 loc) • 6.79 kB
JavaScript
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)
}
}
}
}
}