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"> </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) =><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>=><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 && 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) =><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) =><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) =><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]