zoukankan      html  css  js  c++  java
  • 微信小程序使用Graphql请求接口封装(wxGraphql.js)

    之前写的一个小程序的使用graphql进行请求的后台的接口,当然了 对所有的完整的项目, 请求接口的管理是必要的,但是个人觉得这个请求接口做的好不是很好,需要进一步的优化,后期还会优化请求及拦截部分。

    首先创建一个wxGraphql.js 的文件

    wxGraphql.js

    var responseHandler = function (resolve, reject, res, errorHandler) {
      var retData = res.data.errors ? res.data.errors[0].message : {
        code: 200
      };
      if (res.statusCode == 200 && retData.code == 200) {
        resolve(res.data.data);
      } else {
        reject(res.data);
        if (errorHandler) {
          errorHandler(res.data);
        }
      }
    }
    
    var GraphQL = function (obj, retObj) {
    
      if (!obj.url) {
        throw "请提供GraphQL请求URL(.url)"
      }
    
      retObj = retObj || false;
      let header = {};
    
      if (typeof obj.header === 'function') {
        header = obj.header();
      }
    
      if (typeof obj.header === 'object') {
        header = obj.header;
      }
    
      if (retObj) {
        return {
          query: function (queryObj) {
            return new Promise(function (resolve, reject) {
              wx.request({
                url: obj.url,
                method: 'POST',
                data: JSON.stringify({
                  query: queryObj.query,
                  variables: queryObj.variables
                }),
                header: queryObj.header || header,
                complete: function (res) {
                  responseHandler(resolve, reject, res, obj.errorHandler);
                }
              });
            });
          },
    
          mutate: function (mutateObj) {
            return new Promise(function (resolve, reject) {
              wx.request({
                url: obj.url,
                method: 'POST',
                data: JSON.stringify({
                  query: mutateObj.mutation,
                  variables: mutateObj.variables
                }),
                header: mutateObj.header || header,
                complete: function (res) {
                  responseHandler(resolve, reject, res);
                }
              });
            });
          }
        }
      } else {
        return function (_obj) {
    
          if (!_obj.body) {
            throw "请提供GraphQL请求body"
          }
    
          return wx.request({
            url: obj.url,
            method: 'POST',
            data: JSON.stringify(_obj.body),
            success: _obj.success,
            fail: _obj.fail,
            header: _obj.header || header,
            complete: _obj.complete
          });
        }
      }
    }
    
    module.exports = {
      GraphQL: GraphQL
    }

    再创建一个config.js文件

    mport gql from "./wxGraphql.js";
    const GraphQL = gql.GraphQL;
    const basicgql = GraphQL({
        url: "", //所有请求的baseUrl  url 必填
      },
      true
    )
    
    export default basicgql

    创建一个api.js文件

    import basicgql from './config'
    async function querygql(str, variables) {
        // 这里可以做一些跟hedear相关的配置或者判断
        let token = wx.getStorageSync('token')
          header= {
            token: token,
            "wxapp-info":JSON.stringify(systemInfo)
          }
        let res = await basicgql.query({
          query: str,
          variables: variables,
          header: header 
        })
        return res
      } catch (error) {
        return error
      }
    }
    
    async function mutationgql(str='', variables={}) {
    // header 的配置
          header= {
            token: token,
            appopenid: appopenid,
            "wxapp-info":JSON.stringify(systemInfo)
          }
        let res = await basicgql.mutate({
          mutation: str,
          variables: variables,
          header: header 
        })
        return res
      } catch (error) {
        return error
      }
    }
    export {
      querygql,
      mutationgql
    }。

    然后在需要的页面进行import   querygql 或者 mutationgql 进行请求就ok啦

  • 相关阅读:
    Android基础知识
    使用Android Studio和Genymotion模拟器搭建Andriod开发环境
    【原】Java开发环境搭建
    【转】JavaScript顶级对象参考模型
    【转】在.Net中关于AOP的实现
    【转】各版本IIS下ASP.net请求处理过程区别
    【转】我们应该如何去了解JavaScript引擎的工作原理
    Linux系统编程(27)——线程控制
    Linux系统编程(26)——守护进程
    Linux系统编程(25)——终端
  • 原文地址:https://www.cnblogs.com/taxpolat/p/13856528.html
Copyright © 2011-2022 走看看