诗礼银杏 發表於 2021-10-19 08:39:00

uni-app 环境配置,uni.request封装,接口配置,全局配置,接口调用的封装

<p>1.环境配置 (可参考uni-官网的环境配置)</p>
<p>common文件夹下新建config.js</p>
<div class="cnblogs_code">
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif"></span></div>
<pre>let url_config = ""

if(process.env.NODE_ENV === 'development'){
    // 开发环境
    url_config = 'https://*****.com/'
}else{
    // 生产环境
    url_config = 'https://*****.com/'
}

export default url_config</pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif"></span></div>
</div>
<p>&nbsp;</p>
<p>2.uni.request封装</p>
<p>common文件夹下新建request.js</p>
<div class="cnblogs_code">
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif"></span></div>
<pre>import urlConfig from './config.js'

const request = {}
const headers = {}
const PORT1 = '/baseinfo'
   
request.globalRequest = (url, method, data, power) =&gt; {
/*   权限判断 因为有的接口请求头可能需要添加的参数不一样,所以这里做了区分
    1 == 不通过access_token校验的接口
    2 == 文件下载接口列表
    3 == 验证码登录 */
      
    switch (power){
      case 1:
            headers['Authorization'] = 'Basic a3N1ZGk6a3N1ZGk='
            break;
      case 2:
            headers['Authorization'] = 'Basic a3N1ZGlfcGM6a3N1ZGlfcGM='
            break;
      case 3:
            responseType = 'blob'
            break;
      default:
            headers['Authorization'] = `Bearer ${
                this.$store.getters.userInfo
            }`
            headers['TENANT-ID'] = this.$store.getters.userInfo.tenant_id
            break;
    }
            
    return uni.request({
      url: urlConfig + url,
      method,
      data: data,
      dataType: 'json',
      header: headers
    }).then(res =&gt; {
      if (res.data.status &amp;&amp; res.data.code == 200) {
            return res
      } else {
            throw res.data
      }
    }).catch(parmas =&gt; {</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></pre>
<pre> } <br><br>export default request</pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif"></span></div>
</div>
<p>&nbsp;</p>
<p>3.接口配置</p>
<p>项目根目录下新建api文件,api下新建index.js</p>
<div class="cnblogs_code">
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif"></span></div>
<pre>import request from '@/common/request.js'
import { formatGetUri } from '@/common/util.js'

const api = {}
const PORT1 = 'baseinfo'
// POST请求方式
api.register = params =&gt; request.globalRequest(`${PORT1}/mobile/signUp`, 'POST//必须大写,为了兼容其他应用', params, 1)<br>// GET请求方式<br><em>api.register = params =&gt; request.globalRequest(`${PORT1}/mobile/signUp${formatGetUri(</em><em id="__mceDel">params</em><em id="__mceDel">)}`, 'GET //必须大写,为了兼容其他应用',{}, 1)</em></pre>
<pre>export default api</pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif"></span></div>
</div>
<p>&nbsp;</p>
<p>4. 新建common/util.js</p>
<div class="cnblogs_Highlighter sh-gutter">
<div>
<div id="highlighter_755153" class="syntaxhighlightercsharp">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
<div class="line number13 index12 alt2">13</div>
<div class="line number14 index13 alt1">14</div>
<div class="line number15 index14 alt2">15</div>
<div class="line number16 index15 alt1">16</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="csharp comments">/**</code></div>
<div class="line number2 index1 alt1"><code class="csharp spaces">&nbsp;</code><code class="csharp comments">* 拼接对象为请求字符串</code></div>
<div class="line number3 index2 alt2"><code class="csharp spaces">&nbsp;</code><code class="csharp comments">* 对于需要编码的文本(比如说中文)我们要进行编码</code></div>
<div class="line number4 index3 alt1"><code class="csharp spaces">&nbsp;</code><code class="csharp comments">* @param {Object} obj - 待拼接的对象</code></div>
<div class="line number5 index4 alt2"><code class="csharp spaces">&nbsp;</code><code class="csharp comments">* @returns {string} - 拼接成的请求字符串</code></div>
<div class="line number6 index5 alt1"><code class="csharp spaces">&nbsp;</code><code class="csharp comments">**/</code></div>
<div class="line number7 index6 alt2"><code class="csharp plain">export function formatGetUri(obj) {</code></div>
<div class="line number8 index7 alt1"><code class="csharp spaces">&nbsp;&nbsp;</code><code class="csharp keyword">const</code>&nbsp;<code class="csharp keyword">params</code>&nbsp;<code class="csharp plain">= []</code></div>
<div class="line number9 index8 alt2"><code class="csharp spaces">&nbsp;&nbsp;</code><code class="csharp plain">Object.keys(obj).forEach((key) =&gt; {</code></div>
<div class="line number10 index9 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">let</code>&nbsp;<code class="csharp plain">value = obj</code></div>
<div class="line number11 index10 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">if</code>&nbsp;<code class="csharp plain">(</code><code class="csharp keyword">typeof</code>&nbsp;<code class="csharp plain">value !==&nbsp;</code><code class="csharp string">'undefined'</code>&nbsp;<code class="csharp plain">|| value !==&nbsp;</code><code class="csharp keyword">null</code><code class="csharp plain">) {</code></div>
<div class="line number12 index11 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">params</code><code class="csharp plain">.push(.</code><code class="csharp keyword">join</code><code class="csharp plain">(</code><code class="csharp string">'='</code><code class="csharp plain">))</code></div>
<div class="line number13 index12 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">}</code></div>
<div class="line number14 index13 alt1"><code class="csharp spaces">&nbsp;&nbsp;</code><code class="csharp plain">})</code></div>
<div class="line number15 index14 alt2"><code class="csharp spaces">&nbsp;&nbsp;</code><code class="csharp keyword">return</code>&nbsp;<code class="csharp string">'?'</code>&nbsp;<code class="csharp plain">+&nbsp;</code><code class="csharp keyword">params</code><code class="csharp plain">.</code><code class="csharp keyword">join</code><code class="csharp plain">(</code><code class="csharp string">'&amp;'</code><code class="csharp plain">)</code></div>
<div class="line number16 index15 alt1"><code class="csharp plain">}</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<p>  </p>
<p>5.全局配置</p>
<p>在main.js中新增</p>
<div class="cnblogs_code">
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif"></span></div>
<pre>import Vue from 'vue'
import App from './App'
import store from './store'// 与vue项目中配置相同,可自行配置

import request from './common/request.js'
import api from './api/index.js'
import url from './common/config.js'


Vue.config.productionTip = false
Vue.prototype.$request = request
Vue.prototype.$api = api
Vue.prototype.$url = url

App.mpType = 'app'

const app = new Vue({
    ...App,
    store
})

app.$mount()</pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif"></span></div>
</div>
<p>&nbsp;</p>
<p>5.接口调用</p>
<div class="cnblogs_code">
<pre>this.$api.register({mobile: this.mobile}).then(res =&gt; {
   // 获得数据
   console.log(res)
}).catch(res =&gt; {<br>  // 失败进行的操作<em id="__mceDel"><br></em><em id="__mceDel">})</em></pre>
</div>
<p>&nbsp;</p><br><br>
来源:https://www.cnblogs.com/liyanfeng/p/15423256.html
頁: [1]
查看完整版本: uni-app 环境配置,uni.request封装,接口配置,全局配置,接口调用的封装