uni-app 环境配置,uni.request封装,接口配置,全局配置,接口调用的封装
<p>1.环境配置 (可参考uni-官网的环境配置)</p><p>common文件夹下新建config.js</p>
<div class="cnblogs_code">
<pre>let url_config = <span style="color: rgba(128, 0, 0, 1)">""</span>
<span style="color: rgba(0, 0, 255, 1)">if</span>(process.env.NODE_ENV === <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">development</span><span style="color: rgba(128, 0, 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)"> 开发环境</span>
url_config = <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">https://*****.com/</span><span style="color: rgba(128, 0, 0, 1)">'</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)">{
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 生产环境</span>
url_config = <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">https://*****.com/</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
}
export </span><span style="color: rgba(0, 0, 255, 1)">default</span> url_config</pre>
</div>
<p> </p>
<p>2.uni.request封装</p>
<p>common文件夹下新建request.js</p>
<div class="cnblogs_code">
<pre>import urlConfig <span style="color: rgba(0, 0, 255, 1)">from</span> <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">./config.js</span><span style="color: rgba(128, 0, 0, 1)">'</span>
<span style="color: rgba(0, 0, 255, 1)">const</span> request =<span style="color: rgba(0, 0, 0, 1)"> {}
</span><span style="color: rgba(0, 0, 255, 1)">const</span> headers =<span style="color: rgba(0, 0, 0, 1)"> {}
</span><span style="color: rgba(0, 0, 255, 1)">const</span> PORT1 = <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">/baseinfo</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
request.globalRequest </span>= (url, method, data, power) =><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)"> 权限判断 因为有的接口请求头可能需要添加的参数不一样,所以这里做了区分
1 == 不通过access_token校验的接口
2 == 文件下载接口列表
3 == 验证码登录 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">switch</span><span style="color: rgba(0, 0, 0, 1)"> (power){
</span><span style="color: rgba(0, 0, 255, 1)">case</span> <span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">:
headers[</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">Authorization</span><span style="color: rgba(128, 0, 0, 1)">'</span>] = <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">Basic a3N1ZGk6a3N1ZGk=</span><span style="color: rgba(128, 0, 0, 1)">'</span>
<span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">case</span> <span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)">:
headers[</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">Authorization</span><span style="color: rgba(128, 0, 0, 1)">'</span>] = <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">Basic a3N1ZGlfcGM6a3N1ZGlfcGM=</span><span style="color: rgba(128, 0, 0, 1)">'</span>
<span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">case</span> <span style="color: rgba(128, 0, 128, 1)">3</span><span style="color: rgba(0, 0, 0, 1)">:
responseType </span>= <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">blob</span><span style="color: rgba(128, 0, 0, 1)">'</span>
<span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)">:
headers[</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">Authorization</span><span style="color: rgba(128, 0, 0, 1)">'</span>] =<span style="color: rgba(0, 0, 0, 1)"> `Bearer ${
</span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.$store.getters.userInfo
}`
headers[</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">TENANT-ID</span><span style="color: rgba(128, 0, 0, 1)">'</span>] = <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.$store.getters.userInfo.tenant_id
</span><span style="color: rgba(0, 0, 255, 1)">break</span><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)"> uni.request({
url: urlConfig </span>+<span style="color: rgba(0, 0, 0, 1)"> url,
method,
data: data,
dataType: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">json</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">,
header: headers
}).then(res </span>=><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (res[<span style="color: rgba(128, 0, 128, 1)">1</span>].data.status && res[<span style="color: rgba(128, 0, 128, 1)">1</span>].data.code == <span style="color: rgba(128, 0, 128, 1)">200</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 0, 255, 1)">return</span> res[<span style="color: rgba(128, 0, 128, 1)">1</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)"> {
</span><span style="color: rgba(0, 0, 255, 1)">throw</span> res[<span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">].data
}
})</span>.catch(parmas => {</pre>
<div>
<div> switch (parmas.code) {</div>
<div> case 401:</div>
<div> uni.clearStorageSync()</div>
<div> break</div>
<div> default:</div>
<div> uni.showToast({</div>
<div> title: parmas.message,</div>
<div> icon: 'none'</div>
<div> })</div>
<div> return Promise.reject()</div>
<div> break</div>
<div> }</div>
</div>
<pre><em id="__mceDel"><em id="__mceDel"><em id="__mceDel"><em id="__mceDel"><em id="__mceDel"> })</em></em></em></em></em></pre>
<pre><span style="color: rgba(0, 0, 0, 1)"> } <br><br>export </span><span style="color: rgba(0, 0, 255, 1)">default</span> request</pre>
</div>
<p> </p>
<p>3.接口配置</p>
<p>项目根目录下新建api文件,api下新建index.js</p>
<div class="cnblogs_code">
<pre>import request <span style="color: rgba(0, 0, 255, 1)">from</span> <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">@/common/request.js</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
import { formatGetUri } </span><span style="color: rgba(0, 0, 255, 1)">from</span> <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">@/common/util.js</span><span style="color: rgba(128, 0, 0, 1)">'</span>
<span style="color: rgba(0, 0, 255, 1)">const</span> api =<span style="color: rgba(0, 0, 0, 1)"> {}
</span><span style="color: rgba(0, 0, 255, 1)">const</span> PORT1 = <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">baseinfo</span><span style="color: rgba(128, 0, 0, 1)">'</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> POST请求方式</span>
api.register = <span style="color: rgba(0, 0, 255, 1)">params</span> => request.globalRequest(`${PORT1}/mobile/signUp`, <span style="color: rgba(128, 0, 0, 1)">'POST</span><span style="color: rgba(128, 0, 0, 1)">//必须大写,为了兼容其他应用</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(0, 0, 255, 1)">params</span>, <span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">)<br><span style="color: rgba(0, 128, 0, 1)">// GET请求方式</span><br></span><em>api.register = params => request.globalRequest(`${PORT1}/mobile/signUp${formatGetUri(</em><em id="__mceDel"><em id="__mceDel">params</em></em><em id="__mceDel"><em id="__mceDel">)}`, 'GET //必须大写,为了兼容其他应用',{}, 1)</em></em></pre>
<pre><span style="color: rgba(0, 0, 0, 1)">export </span><span style="color: rgba(0, 0, 255, 1)">default</span> api</pre>
</div>
<p> </p>
<p>4. 新建common/util.js</p>
<div class="cnblogs_Highlighter">
<pre class="brush:csharp;gutter:true;">/**
* 拼接对象为请求字符串
* 对于需要编码的文本(比如说中文)我们要进行编码
* @param {Object} obj - 待拼接的对象
* @returns {string} - 拼接成的请求字符串
**/
export function formatGetUri(obj) {
const params = []
Object.keys(obj).forEach((key) => {
let value = obj
if (typeof value !== 'undefined' || value !== null) {
params.push(.join('='))
}
})
return '?' + params.join('&')
}
</pre>
</div>
<p> </p>
<p>5.全局配置</p>
<p>在main.js中新增</p>
<div class="cnblogs_code">
<pre>import Vue <span style="color: rgba(0, 0, 255, 1)">from</span> <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">vue</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
import App </span><span style="color: rgba(0, 0, 255, 1)">from</span> <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">./App</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
import store </span><span style="color: rgba(0, 0, 255, 1)">from</span> <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">./store</span><span style="color: rgba(128, 0, 0, 1)">'// 与vue项目中配置相同,可自行配置</span><span style="color: rgba(0, 0, 0, 1)">
import request </span><span style="color: rgba(0, 0, 255, 1)">from</span> <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">./common/request.js</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
import api </span><span style="color: rgba(0, 0, 255, 1)">from</span> <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">./api/index.js</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
import url </span><span style="color: rgba(0, 0, 255, 1)">from</span> <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">./common/config.js</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
Vue.config.productionTip </span>= <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">
Vue.prototype.$request </span>=<span style="color: rgba(0, 0, 0, 1)"> request
Vue.prototype.$api </span>=<span style="color: rgba(0, 0, 0, 1)"> api
Vue.prototype.$url </span>=<span style="color: rgba(0, 0, 0, 1)"> url
App.mpType </span>= <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">app</span><span style="color: rgba(128, 0, 0, 1)">'</span>
<span style="color: rgba(0, 0, 255, 1)">const</span> app = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Vue({
...App,
store
})
app.$mount()</span></pre>
</div>
<p> </p>
<p>5.接口调用</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">this</span>.$api.register({mobile: <span style="color: rgba(0, 0, 255, 1)">this</span>.mobile}).then(res =><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)"> console.log(res)
}).catch(res => {<br> <span style="color: rgba(0, 128, 0, 1)">// 失败进行的操作</span></span><em id="__mceDel"><br></em><em id="__mceDel"><span>})</span></em></pre>
</div>
<p> </p>
<p>6.推荐</p>
<p>在uni-app扩展组件中找到了一个封装的案例,大家如果觉得可以的话,可试用 <span style="font-size: 16px">request网络请求,支持拦截器,支持回调函数和Promise,</span></p>
<p><span style="font-size: 16px">官网推荐request封装</span></p><br><br>
来源:https://www.cnblogs.com/gqx-html/p/10967570.html
頁:
[1]