雷学国 發表於 2019-6-3 14:53:00

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>&nbsp;</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) =&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)">   权限判断 因为有的接口请求头可能需要添加的参数不一样,所以这里做了区分
    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>=&gt;<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 &amp;&amp; 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 =&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 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>&nbsp;</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> =&gt; 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 =&gt; 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>&nbsp;</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) =&gt; {
    let value = obj
    if (typeof value !== 'undefined' || value !== null) {
      params.push(.join('='))
    }
})
return '?' + params.join('&amp;')
}
</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>&nbsp;</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 =&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)">   console.log(res)
}).catch(res =&gt; {<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>&nbsp;</p>
<p>6.推荐</p>
<p>在uni-app扩展组件中找到了一个封装的案例,大家如果觉得可以的话,可试用&nbsp; <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]
查看完整版本: uni-app 环境配置,uni.request封装,接口配置,全局配置,接口调用的封装