全網(wǎng)小程序接口請求封裝實例代碼
前言
這篇文章主要針對一些初學(xué)者,有寫的不好的地方,還請大家多多諒解!
在utils文件夾里面新建兩個js文件,一個是api.js、一個就是requtil.js
api.js
這個文件主要api接口,廢話不多說直接上代碼了
const request = require('requtil.js') /*Apis 把全部api都存在這里*/ const Apis = { /* 用戶相關(guān) */ 'login': '/devicecenter/auth/weChtLoin', 'bindUser': '/devicecenter/user/userBindinOpenId', 'genQrCode': '/devicecenter/user/getUserRcode', /* 設(shè)備相關(guān) */ 'getDeviceList': '/minipro/group/getDl', // 獲取設(shè)備列表 'getDeviceAdd': '/minipro/group/addDl', // 添加設(shè)備 'getDeviceDtl': '/minipro/group/delDl', // 刪除設(shè)備 } /* 定義請求方法 */ const user = { login: function(data) { request.get(Apis.login, data) }, getSecret: function(data) { request.get(Apis.getSecret, data) }, } module.exports = { ...user }
requtil.js
把微信的wx.request請求進行分開封裝
const globalsetting = require('globalsetting.js') const baseURL = globalsetting.server const util = require('util.js') const ignoreUrls = [ '/auth/weChatLogin', '/user/userBindingOpenId', '/user/getSecret', '/user/getOpenId' ] var token = '' function post(url, args) { args = _prev(url, 'POST', args) wx.request(args) } function get(url, args) { args = _prev(url, 'GET', args) wx.request(args) } function put(url, args) { args = _prev(url, 'PUT', args) wx.request(args) } function _delete(url, args) { args = _prev(url, 'DELETE', args) wx.request(args) } function _prev(url, method, args) { // console.log('123',args) args = args || {} args.url = url if(args.urlparam) args.url += '/' + args.urlparam var params = parseParams(args) params.method = method params.success = success(params.success) params.fail = fail(params.fail) setToken(params) return params } // 處理接口是否需要添加header.token方法 function setToken(params) { if (!ignoreUrls.some(url => params.url.match(new RegExp(url)))) { if (!params.header) params.header = { token: getToken() } else params.header.token = getToken() } else { // console.log('ignore: ', params.url) } } // 處理接口參數(shù)方法 function parseParams(args) { var params = Object.assign(args) if (!(params.url.startsWith('https://') || params.url.startsWith('http://'))) params.url = baseURL + params.url if(params.param) { if (params.url.indexOf('?') > -1 && params.url.indexOf('?') != params.url.length - 1) { params.url += '&' } else if(params.url.indexOf('?') == params.url.length -1) { // 無任何操作 } else { params.url += '?' } var buf = '' for(var name in params.param) { let val = params.param[name]; buf += name + '=' + encodeURI(typeof val == 'object' ? JSON.stringify(val) : val) + '&' } params.url += buf } return params } // 接口返回成功方法 function success(callback) { return function(rs) { var status = rs.statusCode if (status == 405) { util.errorMsg('請求失敗405:\n服務(wù)器返回失敗') } else if(status == 404) { util.errorMsg('請求失敗404:\n找不到接口') } if(callback) callback(rs.data) } } function fail(callback) { return function(rs) { console.log(rs) if(callback) callback(rs) } } // 獲取接口請求回來的token function _setToken(tk) { token = tk wx.setStorageSync('token', token) }
頁面怎么調(diào)用
在全局的app.js里面
import api from './utils/apis.js'; App({ api: api, })
index頁面
通過getApp()獲取api接口,自定義一個函數(shù)里面用到了promise方法獲取數(shù)據(jù),然后在getDevList調(diào)用getChatRecord方法,就可以數(shù)據(jù)賦值
const APP = getApp() getDevList(e){ this.getChatRecord().then(res => { wx.hideLoading({ success: (res) => {}, }); if(res.id == '-1') { utils.errorMsg(res.message); }else { console.log(res) } }) } // 設(shè)備列表請求接口 getChatRecord (params = {}) { return new Promise((resolve, reject) => { APP.api.getDeviceList({ success: res => { resolve(res) } }) }) },
后期我會做一個demo出來,放到github上面,這樣你們看起來更直觀一些
總結(jié)
到此這篇關(guān)于全網(wǎng)小程序接口請求封裝實例的文章就介紹到這了,更多相關(guān)全網(wǎng)小程序接口請求封裝內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Google的跟蹤代碼 動態(tài)加載js代碼方法應(yīng)用
Google的跟蹤代碼 動態(tài)加載js代碼,需要的朋友可以參考下2012-11-11關(guān)于layui flow loading占位圖的實現(xiàn)方法
今天小編就為大家分享一篇關(guān)于layui flow loading占位圖的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-09-09JavaScript實現(xiàn)url地址自動檢測并添加URL鏈接示例代碼
寫一個簡單的聊天系統(tǒng),發(fā)出Htpp的Url實現(xiàn)跳轉(zhuǎn)加上a標簽,下面是具體的實現(xiàn),感興趣的朋友不要錯過2013-11-11比較詳細的關(guān)于javascript中void(0)的具體含義解釋
比較詳細的關(guān)于javascript中void(0)的具體含義解釋...2007-08-08JavaScript 封裝Ajax傳遞的數(shù)據(jù)代碼
在使用Ajax傳輸數(shù)據(jù)時,少不了對傳遞的字符進行轉(zhuǎn)碼,我的實現(xiàn)方式是將需要傳遞的數(shù)據(jù)暫存到一js Bean中,將js Bean放到Array中,生成傳輸參數(shù)時對Array中的jsBean進行分解,得到相應(yīng)屬性信息并編碼..2009-06-06解決js相同的正則多次調(diào)用test()返回的值卻不同的問題
今天小編就為大家分享一篇解決js相同的正則多次調(diào)用test()返回的值卻不同的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-10-10