云间渔夫 發表於 2021-1-29 10:36:00

uni-app 请求 uni.request封装使用

<p class="md-end-block md-p md-focus"><span class="md-plain md-expand">对uni.request的一些共同参数进行简单的封装,减少重复性数据请求代码。方便全局调用。</span></p>
<p class="md-end-block md-p"><span class="md-plain">先在目录下创建 utils 和 common 这2个文件夹</span></p>
<p class="md-end-block md-p"><span class="md-plain"><img src="https://img2020.cnblogs.com/blog/2237618/202101/2237618-20210129103201760-1156242959.png" alt="" loading="lazy"></span></p>
<p class="md-end-block md-p">&nbsp;</p>
<p class="md-end-block md-p md-focus"><span class="md-plain">utils 是存放工具类的,common 用来放置常用方法的</span></p>
<p class="md-end-block md-p"><span class="md-plain">之后在utils 中创建 requset.js 用来放置 uni.request 的请求方法,在对其进行简单的封装。</span></p>
<h5 class="md-end-block md-p"><span class="md-plain">requset.js 代码</span></h5>
<div class="cnblogs_code">
<pre>import operate from '../common/operate.js'
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> vuex 的使用详情参考官网 https://uniapp.dcloud.io/vue-vuex</span>
import store from '../store/index.js'<span style="color: rgba(0, 0, 0, 1)">

export </span><span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)"> class Request {
    http(param) {
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 请求参数</span>
      <span style="color: rgba(0, 0, 255, 1)">var</span> url =<span style="color: rgba(0, 0, 0, 1)"> param.url,
            method </span>=<span style="color: rgba(0, 0, 0, 1)"> param.method,
            header </span>=<span style="color: rgba(0, 0, 0, 1)"> {},
            data </span>= param.data ||<span style="color: rgba(0, 0, 0, 1)"> {},
            token </span>= param.token || ""<span style="color: rgba(0, 0, 0, 1)">,
            hideLoading </span>= param.hideLoading || <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;

      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">拼接完整请求地址</span>
      <span style="color: rgba(0, 0, 255, 1)">var</span> requestUrl = operate.api +<span style="color: rgba(0, 0, 0, 1)"> url;

      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">请求方式:GET或POST(POST需配置</span>
      <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> header: {'content-type' : "application/x-www-form-urlencoded"},)</span>
      <span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (method) {
            method </span>= method.toUpperCase(); <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">小写改为大写</span>
            <span style="color: rgba(0, 0, 255, 1)">if</span> (method == "POST"<span style="color: rgba(0, 0, 0, 1)">) {
                header </span>=<span style="color: rgba(0, 0, 0, 1)"> {
                  </span>'content-type': "application/x-www-form-urlencoded"<span style="color: rgba(0, 0, 0, 1)">
                };
            } </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
                header </span>=<span style="color: rgba(0, 0, 0, 1)"> {
                  </span>'content-type': "application/json"<span style="color: rgba(0, 0, 0, 1)">
                };
            }
      }

      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">加载圈</span>
      <span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(0, 0, 0, 1)">hideLoading) {
            uni.showLoading({
                title: </span>'加载中...'<span style="color: rgba(0, 0, 0, 1)">
            });
      }

      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 返回promise</span>
      <span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">new</span> Promise((resolve, reject) =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
            </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 请求</span>
<span style="color: rgba(0, 0, 0, 1)">            uni.request({
                url: requestUrl,
                data: data,
                method: method,
                header: header,
                success: (res) </span>=&gt;<span style="color: rgba(0, 0, 0, 1)"> {
                  </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 判断 请求api 格式是否正确</span>
                  <span style="color: rgba(0, 0, 255, 1)">if</span> (res.statusCode &amp;&amp; res.statusCode != 200<span style="color: rgba(0, 0, 0, 1)">) {
                        uni.showToast({
                            title: </span>"api错误" +<span style="color: rgba(0, 0, 0, 1)"> res.errMsg,
                            icon: </span>'none'<span style="color: rgba(0, 0, 0, 1)">
                        });
                        </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)">;
                  }
                  </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> code判断:200成功,不等于200错误</span>
                  <span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (res.data.code) {
                        </span><span style="color: rgba(0, 0, 255, 1)">if</span> (res.data.code != '200'<span style="color: rgba(0, 0, 0, 1)">) {
                            uni.showToast({
                              title: </span>"" +<span style="color: rgba(0, 0, 0, 1)"> res.data.msg,
                              icon: </span>'none'<span style="color: rgba(0, 0, 0, 1)">
                            });
                            </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)">;
                        }
                  } </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
                        uni.showToast({
                            title: </span>"code!=200" +<span style="color: rgba(0, 0, 0, 1)"> res.data.msg,
                            icon: </span>'none'<span style="color: rgba(0, 0, 0, 1)">
                        });
                        </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)">;
                  }
                  </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 将结果抛出</span>
<span style="color: rgba(0, 0, 0, 1)">                  resolve(res.data)
                },
                </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">请求失败</span>
                fail: (e) =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
                  uni.showToast({
                        title: </span>"" +<span style="color: rgba(0, 0, 0, 1)"> e.data.msg,
                        icon: </span>'none'<span style="color: rgba(0, 0, 0, 1)">
                  });
                  resolve(e.data);
                },
                </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">请求完成</span>
<span style="color: rgba(0, 0, 0, 1)">                complete() {
                  </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">隐藏加载</span>
                  <span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(0, 0, 0, 1)">hideLoading) {
                        uni.hideLoading();
                  }
                  resolve();
                  </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)">;
                }
            })
      })
    }
}</span></pre>
</div>
<p class="md-end-block md-p md-focus"><span class="md-plain">在common 中分别创建 operate.js 和 api.js</span></p>
<p class="md-end-block md-p"><span class="md-plain md-expand"> operate.js 用来放置请求接口 api 地址</span></p>
<div class="cnblogs_code">
<pre>export <span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)"> {
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">接口</span>
    api: "http://192.168.208.126:8080"<span style="color: rgba(0, 0, 0, 1)">,
}</span></pre>
</div>
<p>api.js 是用来调用我们封装好的 uni.request ,并且统一管理请求接口,在后续开发中只需要在页面中调用 api.js中请求即可</p>
<div class="cnblogs_code">
<pre>import Request from '@/utils/requset.js'<span style="color: rgba(0, 0, 0, 1)">
let request </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Request().http

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">全局定义请求头</span>
export <span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)"> {
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 请求样式</span>
    classifyLeft: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(data) {
      </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> request({
            url: </span>"/category/list", <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">请求头</span>
            method: "GET", <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">请求方式</span>
            data: data, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">请求数据</span>
<span style="color: rgba(0, 0, 0, 1)">      })
    },
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">
请求样式:
    自定义名字: function(data) {
      return request({
            url: "/banner", //请求头
            method: "GET", //请求方式
            data: data,    //请求数据
            token: token, // 可传
            hideLoading: false, //加载样式
      })
    },
</span><span style="color: rgba(0, 128, 0, 1)">*/</span></pre>
</div>
<p class="md-end-block md-p md-focus"><span class="md-plain">api.js的调用可以在main.js 中进行全局调用,也可以在需要的页面中调用,可根据实际情况来决定是否全局 调用。下面只介绍全局调用</span></p>
<p class="md-end-block md-p"><span class="md-plain md-expand">在mian.js中导入api.js</span></p>
<div class="cnblogs_code">
<pre>1<span style="color: rgba(0, 0, 0, 1)">. 在main.js 中引入api.js
      import api from </span>'@/common/api.js'<span style="color: rgba(0, 0, 0, 1)">
      Vue.prototype.$api </span>=<span style="color: rgba(0, 0, 0, 1)"> api
</span>2<span style="color: rgba(0, 0, 0, 1)">. 在页面中调用
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">不传参数</span>
      <span style="color: rgba(0, 0, 255, 1)">this</span>.$api.sendRequest().then((res) =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
            console.log(res);
      })
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">传参</span>
      <span style="color: rgba(0, 0, 255, 1)">this</span>.$api.sendRequest({参数}).then((res) =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
            console.log(res);
      })</span></pre>
</div>
<p>项目地址:https://gitee.com/jielov/uni-app-tabbar</p>
<p><img src="https://img2020.cnblogs.com/blog/2237618/202101/2237618-20210129103611472-79794050.png" alt="" loading="lazy"></p>

</div>
<div id="MySignature" role="contentinfo">
    <p>本文来自博客园,作者:虚乄,转载请注明原文链接:https://www.cnblogs.com/lovejielive/p/14343619.html</p><br><br>
来源:https://www.cnblogs.com/lovejielive/p/14343619.html
頁: [1]
查看完整版本: uni-app 请求 uni.request封装使用