API联调

api

所有的api方法都会被注入到 uni.$API 对象中。
调用:uni.$API.Module.api()

export default {
  methods: {
   async fetchData() {
     let res = await uni.$API.Demo.demoList();
    },
  }
}

目录地址: API (opens new window)

  • Module : 是位于 api->page 里的模块,也是 page 下文件的名称 (首字母大写)
  • api : 是 Module 里面的方法

# 新增API 模块

api->page 新增一个API模块文件,文件的首字母大写,例如新增 Demo.jsapi->index.js 会遍历该文件,自动将所有的 Demo 模块的方法 注册在 uni.$API.Demo

import request from '../request';
class Demo {
  list($data) {
    return request.ajax('demo/index/list', $data);
  }
}
export default new Demo();

如果需要调用 list 方法,那么可以这样使用:uni.$API.Demo.list()

# GET 和 POST 等等接口类型

每个接口都会经过一层js逻辑的处理,该逻辑的位置在 api->apiConfig.js ,源码如下:

export default {

  processing: ($url = '', query = {}) => {
    if (!$url) return;
    let method = 'get';
    let url = $url;
    // 默认过滤,可以自行独自处理特殊情况
    query = uni.$co.Common.clearParams(query);
    if (query.hasOwnProperty('method')) {
      method = query.method;
      // 删除 method
      delete query.method;
    }
    // 编辑删除时需要id
    if (method.toLowerCase() === 'get') {
      if (query.id || Number(query.id) === 0) {
        url = url + `/${query.id}`;
      }
      // 删除ID
      if (query.id) {
        delete query.id;
      }
    }
    let requestObj = {url};
    requestObj['method'] = method;
    requestObj.data = query;
    return requestObj;
  },
}

从上面的代码中可以看出,uplus (opens new window) 默认的请求方式是 get ,如果需要更改请求类型,那么我们可以通过 query 对象项目的 method 更改, 例如里面post请求,当然也可以使用 'PUT' 等等。

export default {
  methods: {
   async fetchData() {
     let res = await uni.$API.Demo.list({method:'POST'});
    },
  }
}

同时会发现所有的参数会经过一个 uni.$co.Common.clearParams 方法,该方法主要是为了过滤空字符、空数字等字段。如果有其他的场景,二次开发的时候,可以相应修改。
uplus (opens new window) 默认将所有的 get 请求中只要带有 id 参数的都会改为 demo/index/list/${id} 的形式,如果不符合自己场景的,可以做出调整。