要封装的原因是因为对于API部分代码来讲,一般是有固定规则的。
首先api的域名端口等一般是固定的,如果每次都写就会导致重复,且后续修改起来也很麻烦。
然后不同的接口对应的不同的路径,那么每次call的时候只要讲路径作为参数输入就可以。
之后是call的结果成功和错误的处理基本上都是一样的,错误的时候抛出异常,成功了就将结果赋值到data里的变量。
基于这些考虑,封装这个服务是很有必要的。
具体这么做:
- 建立util目录,新建api.js
api.js的内容如下:
const BASE_URL = 'https://api-hmugo-web.itheima.net'
export const myRequest = (options) => {return new Promise ((resolve, reject) => { uni.request({ url: BASE_URL + options.url, method: options.method || 'GET', data: options.data || {}, success:res => { if (res.statusCode !== 200) { return uni.showToast({ title: '获取数据失败' }) } resolve(res) }, fail:err => { uni.showToast({ title: '调用接口失败' }) reject(err) } }) })
}
- 在框架中引入api.js服务
在main.js中添加如下代码:
import { myRequest } from './util/api.js'
Vue.prototype.$myRequest = myRequest
之后在页面中调用$myRequest方法并将获得的内容赋值即可
// 获取轮播图
async getSwipers () {const res = await this.$myRequest({ url: '/api/public/v1/home/swiperdata' }) this.swipers = res
}
最新回复