Files
lx-music-desktop/src/renderer/utils/request.js
2019-08-17 21:43:53 +08:00

197 lines
5.5 KiB
JavaScript

import request from 'request'
// import progress from 'request-progress'
import { debugRequest } from './env'
// import fs from 'fs'
const fatchData = (url, method, options, callback) => {
console.log('---start---', url)
return request(url, {
method,
headers: options.headers,
Origin: options.origin,
data: options.data,
// timeout: 5000,
json: options.format === undefined || options.format === 'json',
}, (err, resp, body) => {
if (err) return callback(err, null)
console.log('---end---', url)
callback(null, resp, body)
})
}
export const httpFatch = (url, options = { method: 'get' }) => {
let requestObj
let cancelFn
const p = new Promise((resolve, reject) => {
cancelFn = reject
debugRequest && console.log(`\n---send request------${url}------------`)
requestObj = fatchData(url, options.method, options, (err, resp, body) => {
// options.isShowProgress && window.api.hideProgress()
debugRequest && console.log(`\n---response------${url}------------`)
debugRequest && console.log(JSON.stringify(body))
requestObj = null
cancelFn = null
if (err) {
console.log(err)
if (err.code === 'ETIMEDOUT') {
const { promise, cancelHttp } = httpFatch(url, options)
obj.cancelHttp = cancelHttp
return promise
}
}
resolve(resp)
})
})
const obj = {
promise: p,
cancelHttp() {
console.log('cancel')
if (!requestObj) return
cancelHttp(requestObj)
cancelFn(new Error('取消http请求'))
requestObj = null
cancelFn = null
},
}
return obj
}
/**
* 取消请求
* @param {*} index
*/
export const cancelHttp = requestObj => {
if (!requestObj) return
console.log('cancel:', requestObj.href)
requestObj.abort()
}
/**
* http 请求
* @param {*} url 地址
* @param {*} options 选项
* @param {*} cb 回调
* @return {Number} index 用于取消请求
*/
export const http = (url, options, cb) => {
if (typeof options === 'function') {
cb = options
options = {}
}
// 默认选项
if (options.method == null) options.method = 'get'
debugRequest && console.log(`\n---send request------${url}------------`)
return fatchData(url, options.method, options, (err, resp, body) => {
// options.isShowProgress && window.api.hideProgress()
debugRequest && console.log(`\n---response------${url}------------`)
debugRequest && console.log(JSON.stringify(body))
if (err) {
debugRequest && console.log(JSON.stringify(err))
}
cb(err, resp, body)
})
}
/**
* http get 请求
* @param {*} url 地址
* @param {*} options 选项
* @param {*} callback 回调
* @return {Number} index 用于取消请求
*/
export const httpGet = (url, options, callback) => {
if (typeof options === 'function') {
callback = options
options = {}
}
// options.isShowProgress && window.api.showProgress({
// title: options.progressMsg || '请求中',
// modal: true,
// })
debugRequest && console.log(`\n---send request-------${url}------------`)
return fatchData(url, 'get', options, function(err, resp, body) {
// options.isShowProgress && window.api.hideProgress()
debugRequest && console.log(`\n---response------${url}------------`)
debugRequest && console.log(JSON.stringify(body))
if (err) {
debugRequest && console.log(JSON.stringify(err))
}
callback(err, resp, body)
})
}
/**
* http post 请求
* @param {*} url 请求地址
* @param {*} data 提交的数据
* @param {*} options 选项
* @param {*} callback 回调
* @return {Number} index 用于取消请求
*/
export const httpPost = (url, data, options, callback) => {
if (typeof options === 'function') {
callback = options
options = {}
}
// options.isShowProgress && window.api.showProgress({
// title: options.progressMsg || '请求中',
// modal: true,
// })
options.data = data
debugRequest && console.log(`\n---send request-------${url}------------`)
return fatchData(url, 'post', options, function(err, resp, body) {
// options.isShowProgress && window.api.hideProgress()
debugRequest && console.log(`\n---response------${url}------------`)
debugRequest && console.log(JSON.stringify(body))
if (err) {
debugRequest && console.log(JSON.stringify(err))
}
callback(err, resp, body)
})
}
/**
* http jsonp 请求
* @param {*} url 请求地址
* @param {*} options 选项
* options.jsonpCallback 回调
* @param {*} callback 回调
* @return {Number} index 用于取消请求
*/
export const http_jsonp = (url, options, callback) => {
if (typeof options === 'function') {
callback = options
options = {}
}
let jsonpCallback = 'jsonpCallback'
if (url.indexOf('?') < 0) url += '?'
url += `&${options.jsonpCallback}=${jsonpCallback}`
options.format = 'script'
// options.isShowProgress && window.api.showProgress({
// title: options.progressMsg || '请求中',
// modal: true,
// })
debugRequest && console.log(`\n---send request-------${url}------------`)
return fatchData(url, 'get', options, function(err, resp, body) {
// options.isShowProgress && window.api.hideProgress()
debugRequest && console.log(`\n---response------${url}------------`)
debugRequest && console.log(JSON.stringify(body))
if (err) {
debugRequest && console.log(JSON.stringify(err))
} else {
body = JSON.parse(body.replace(new RegExp(`^${jsonpCallback}\\(({.*})\\)$`), '$1'))
}
callback(err, resp, body)
})
}