mirror of
https://github.com/zuiidea/antd-admin
synced 2026-11-01 15:24:01 +00:00
Optimize file 'request.js',and remove code about cross domin.
This commit is contained in:
+30
-80
@@ -1,26 +1,25 @@
|
||||
/* global window */
|
||||
import axios from 'axios'
|
||||
import qs from 'qs'
|
||||
import jsonp from 'jsonp'
|
||||
import cloneDeep from 'lodash.clonedeep'
|
||||
import pathToRegexp from 'path-to-regexp'
|
||||
import { message } from 'antd'
|
||||
import { YQL, CORS } from './config'
|
||||
|
||||
const fetch = options => {
|
||||
let { method = 'get', data, fetchType, url } = options
|
||||
import qs from 'qs'
|
||||
|
||||
export default function request(options) {
|
||||
let { data, url, method = 'get' } = options
|
||||
const cloneData = cloneDeep(data)
|
||||
|
||||
try {
|
||||
let domain = ''
|
||||
if (url.match(/[a-zA-z]+:\/\/[^/]*/)) {
|
||||
;[domain] = url.match(/[a-zA-z]+:\/\/[^/]*/)
|
||||
const urlMatch = url.match(/[a-zA-z]+:\/\/[^/]*/)
|
||||
if (urlMatch) {
|
||||
;[domain] = urlMatch
|
||||
url = url.slice(domain.length)
|
||||
}
|
||||
|
||||
const match = pathToRegexp.parse(url)
|
||||
url = pathToRegexp.compile(url)(data)
|
||||
for (let item of match) {
|
||||
|
||||
for (const item of match) {
|
||||
if (item instanceof Object && item.name in cloneData) {
|
||||
delete cloneData[item.name]
|
||||
}
|
||||
@@ -30,83 +29,30 @@ const fetch = options => {
|
||||
message.error(e.message)
|
||||
}
|
||||
|
||||
if (fetchType === 'JSONP') {
|
||||
return new Promise((resolve, reject) => {
|
||||
jsonp(
|
||||
url,
|
||||
{
|
||||
param: `${qs.stringify(data)}&callback`,
|
||||
name: `jsonp_${new Date().getTime()}`,
|
||||
timeout: 4000,
|
||||
},
|
||||
(error, result) => {
|
||||
if (error) {
|
||||
reject(error)
|
||||
}
|
||||
resolve({ statusText: 'OK', status: 200, data: result })
|
||||
}
|
||||
)
|
||||
})
|
||||
} else if (fetchType === 'YQL') {
|
||||
url = `http://query.yahooapis.com/v1/public/yql?q=select * from json where url='${
|
||||
options.url
|
||||
}?${encodeURIComponent(qs.stringify(options.data))}'&format=json`
|
||||
data = null
|
||||
}
|
||||
options.url =
|
||||
method.toLocaleLowerCase() === 'get'
|
||||
? `${url}${cloneData ? '?' : ''}${qs.stringify(cloneData)}`
|
||||
: url
|
||||
|
||||
switch (method.toLowerCase()) {
|
||||
case 'get':
|
||||
return axios.get(url, {
|
||||
params: cloneData,
|
||||
})
|
||||
case 'delete':
|
||||
return axios.delete(url, {
|
||||
data: cloneData,
|
||||
})
|
||||
case 'post':
|
||||
return axios.post(url, cloneData)
|
||||
case 'put':
|
||||
return axios.put(url, cloneData)
|
||||
case 'patch':
|
||||
return axios.patch(url, cloneData)
|
||||
default:
|
||||
return axios(options)
|
||||
}
|
||||
}
|
||||
|
||||
export default function request(options) {
|
||||
if (options.url && options.url.indexOf('//') > -1) {
|
||||
const origin = `${options.url.split('//')[0]}//${
|
||||
options.url.split('//')[1].split('/')[0]
|
||||
}`
|
||||
if (window.location.origin !== origin) {
|
||||
if (CORS && CORS.indexOf(origin) > -1) {
|
||||
options.fetchType = 'CORS'
|
||||
} else if (YQL && YQL.indexOf(origin) > -1) {
|
||||
options.fetchType = 'YQL'
|
||||
} else {
|
||||
options.fetchType = 'JSONP'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return fetch(options)
|
||||
return axios(options)
|
||||
.then(response => {
|
||||
const { statusText, status } = response
|
||||
let data =
|
||||
options.fetchType === 'YQL'
|
||||
? response.data.query.results.json
|
||||
: response.data
|
||||
if (data instanceof Array) {
|
||||
data = {
|
||||
list: data,
|
||||
const { statusText, status, data } = response
|
||||
|
||||
let result = {}
|
||||
if (typeof data === 'object') {
|
||||
result = data
|
||||
if (Array.isArray(data)) {
|
||||
result.list = data
|
||||
}
|
||||
} else {
|
||||
result.data = data
|
||||
}
|
||||
|
||||
return Promise.resolve({
|
||||
success: true,
|
||||
message: statusText,
|
||||
statusCode: status,
|
||||
...data,
|
||||
...result,
|
||||
})
|
||||
})
|
||||
.catch(error => {
|
||||
@@ -123,6 +69,10 @@ export default function request(options) {
|
||||
}
|
||||
|
||||
/* eslint-disable */
|
||||
return Promise.reject({ success: false, statusCode, message: msg })
|
||||
return Promise.reject({
|
||||
success: false,
|
||||
statusCode,
|
||||
message: msg,
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user