2019-09-09 15:39:57 3156浏览
今天千锋扣丁学堂HTML5培训老师给大家分享一篇关于微信小程序HTTP请求从0到1封装的详细介绍,首先作为一个前端开发者,从最开始的js、jQuery一把梭,后来的vue、react、angular等MVVM、MVC框架,我们在开发工程中都离不开HTTP库的使用。
wx.request({
url: 'test.php', //仅为示例,并非真实的接口地址
data: {
x: '',
y: ''
},
header: {
'content-type': 'application/json' // 默认值
},
success (res) {
console.log(res.data)
}
})
class Axios {
constructor() {
this.instance = null // 类的实例
this.config = defaultConfig
}
create(instanceConfig) {
const { config } = this
// 创建实例的时候添加基本配置
this.config = {
...config,
...instanceConfig
}
return this
}
// 单例
static getInstance() {
if (!this.instance) {
this.instance = new Axios()
}
return this.instance
}
}
const axios = Axios.getInstance()
const dispatchRequest = function(config) {
return new Promise((resolve, reject) => {
wx.request({
...config,
url: config.base + config.url,
success: res => {
resolve(res)
},
fail: res => {
reject(res)
}
})
})
}
request(options) {
const { config } = this
// 实例请求的时候添加基本配置
const requsetOptions = {
...config,
...options
}
return dispatchRequest(requsetOptions)
}
const instance = (config = {}) => {
return axios.create({
base: globalApi,
...config
})
}
export function request(options) {
const { baseConfig, url, method, data, isLogin } = options
instance(baseConfig)
.request({
url,
method: method || 'GET',
data
})
.then(res => {
options.success && options.success(res)
})
.catch(err => {
if (options.error) {
options.error(err)
} else {
errAlert()
}
})
}
}
class InterceptorManager {
constructor() {
this.fulfilled = null
this.rejected = null
}
use(fulfilled, rejected) {
this.fulfilled = fulfilled
this.rejected = rejected
}
}
constructor() {
this.instance = null // 类的实例
this.config = defaultConfig
this.interceptors = {
request: new InterceptorManager(),
response: new InterceptorManager()
}
}
request(options) {
const { config, interceptors } = this
// 实例请求的时候添加基本配置
const requsetOptions = {
...config,
...options
}
const promiseArr = [] // promise存储队列
// 请求拦截器
promiseArr.push({
fulfilled: interceptors.request.fulfilled,
rejected: interceptors.request.rejected
})
// 请求
promiseArr.push({
fulfilled: dispatchRequest,
rejected: null
})
// 回调拦截器
promiseArr.push({
fulfilled: interceptors.response.fulfilled,
rejected: interceptors.response.rejected
})
let p = Promise.resolve(requsetOptions)
promiseArr.forEach(ele => {
p = p.then(ele['fulfilled'], ele['rejected'])
})
return p
}
axios.interceptors.request.use(
request => {
return request
},
err => {
console.error(err)
}
)
axios.interceptors.response.use(
response => {
return response
},
err => {
console.error(err)
}
)
【关注微信公众号获取更多学习资料】 【扫码进入HTML5前端开发VIP免费公开课】