要封装的原因是因为对于API部分代码来讲,一般是有固定规则的。
首先api的域名端口等一般是固定的,如果每次都写就会导致重复,且后续修改起来也很麻烦。
然后不同的接口对应的不同的路径,那么每次call的时候只要讲路径作为参数输入就可以。
之后是call的结果成功和错误的处理基本上都是一样的,错误的时候抛出异常,成功了就将结果赋值到data里的变量。
基于这些考虑,封装这个服务是很有必要的。

具体这么做:

  1. 建立util目录,新建api.js
  2. 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)
            }
        })
    })

    }

  3. 在框架中引入api.js服务
    在main.js中添加如下代码:
import { myRequest } from './util/api.js'
Vue.prototype.$myRequest = myRequest
  1. 之后在页面中调用$myRequest方法并将获得的内容赋值即可

    // 获取轮播图
    async getSwipers () {

    const res = await this.$myRequest({
        url: '/api/public/v1/home/swiperdata'
    })
    this.swipers = res

    }

最后编辑:2021年02月26日 ©著作权归作者所有

发表评论