程序員應(yīng)該具備的美德是“懶”,能用一行代碼搞定的,盡量不用兩行。
所以,剛開始研究PbootCMS制作小程序的時(shí)候,弟一個(gè)想法就是封裝接口。
文件下載地址:
下面是封裝步驟(封裝文件在文章醉后提供下載,供大家參考)。
1、準(zhǔn)備md5加密文件。
因?yàn)?a style="box-sizing: border-box; color: rgb(33, 37, 41); text-decoration-line: none; background-color: transparent;">PbootCMS的簽名參數(shù)signature是經(jīng)過雙層md5加密的,當(dāng)然如果后臺(tái)WebAPI沒有開啟強(qiáng)制認(rèn)證的,這一步可以跳過。
2、封裝一下API的請(qǐng)求方法。
//聲明一個(gè)請(qǐng)求函數(shù) function api_request(url, method, parm){ var apiurl = '******'; //域名 + api.php var appid = '******'; //后臺(tái)WebAPI中設(shè)置的API認(rèn)證用戶 var appsecret = '******'; //后臺(tái)WebAPI中設(shè)置的API認(rèn)證密鑰 var timestamp = Date.parse(new Date()); timestamp = timestamp / 1000; //獲取當(dāng)前時(shí)間戳 var signature = md5.hex_md5(md5.hex_md5(appid + appsecret + timestamp)); //構(gòu)建signature var data = { //因?yàn)樗阉?、留言和表單需要用到POST方法,要通過data傳遞參數(shù),所以先聲明data對(duì)象,方便后面添加 appid: appid, timestamp: timestamp, signature: signature, }; //根據(jù)請(qǐng)求方法構(gòu)建Header if (method == 'POST') { //POST方法,設(shè)置請(qǐng)求頭部 var header = { 'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8' }; //添加POST參數(shù)到data for (var i in parm) { data[i] = parm[i]; } } else { //GET方法,設(shè)置請(qǐng)求頭部 method = 'GET'; var header = { 'Content-Type': 'application/json' }; } //通過promise返回?cái)?shù)據(jù) var promise = new Promise(function(resolve,reject){ //小程序自帶的wx.request請(qǐng)求 wx.request({ method: method, url: apiurl + url, header: header, data: data, //請(qǐng)求成功 success: function(res){ var api_data = res.data; if (api_data.code != 1 && api_data.code != 0){ reject({ error: '數(shù)據(jù)請(qǐng)求失敗,請(qǐng)稍后重試', code: 500 }); return; } else { resolve(api_data); } } }) }) //返回?cái)?shù)據(jù) return promise; }
3、封裝API模塊
//這里就比較簡(jiǎn)單了,就是構(gòu)建api的url,然后傳入到api_request這個(gè)請(qǐng)求函數(shù),返回?cái)?shù)據(jù)。 //下面是根據(jù)官方文檔中的api封裝的各個(gè)模塊,有些沒有實(shí)際測(cè)試檢查,可能有手誤什么的,大家自行調(diào)整即可。 //Api模塊 module.exports = { //獲取公司信息 companyinfos: function(){ var url = '/cms/company'; return api_request(url); }, //獲取單個(gè)公司信息 companyinfo: function(name){ var url = '/cms/company/name/' + name; return api_request(url); }, //獲取網(wǎng)站信息 siteinfos: function(){ var url = '/cms/site'; return api_request(url); }, //獲取單個(gè)網(wǎng)站信息 siteinfo: function(name){ var url = '/cms/site/name/' + name; return api_request(name); }, //獲取自定義標(biāo)簽 get_labels: function(){ var url = '/cms/label'; return api_request(url); }, //獲取單個(gè)自定義標(biāo)簽 get_label: function(){ var url = '/cms/label/name/' + name; return api_request(url); }, //獲取幻燈片 get_slide: function(gid,num){ var url = '/cms/slide/gid/' + gid + '/num/' + num; return api_request(url); }, //獲取友情鏈接 get_links: function(gid,num){ var url = '/cms/link/gid/' + gid + '/num/' + num; return api_request(url); }, //獲取欄目列表 get_navs: function(){ var url = '/cms/nav'; return api_request(url); }, //獲取指定欄目列表 get_nav: function(scode){ var url = '/cms/nav/scode/' + scode; return api_request(url); }, //獲取當(dāng)前欄目 get_current_cat: function(scode){ var url = '/cms/sort/scode/' + scode; return api_request(url); }, //獲取內(nèi)容列表 get_list: function(scode,num,order){ if( ( num != '' ) && !order ){ var url = '/list/' + scode + '/num/' + num; } else if( !num && ( order != '' ) ){ var url = '/list/' + scode + '/order/' + order; } else if ( (num != '') && (order != '') ){ var url = '/list/' + scode + '/num/' + num + '/order/' + order; } else { var url = '/list/' + scode; } return api_request(url); }, //獲取內(nèi)容列表第*頁(yè) get_list_paged: function (scode, paged, num, order) { if ((num != '') && (order == '')) { var url = '/list/' + scode + '/num/' + num + '/page/' + paged; } else if ((num == '') && (order != '')) { var url = '/list/' + scode + '/order/' + order + '/page/' + paged; } else if ((num != '') && (order != '')) { var url = '/list/' + scode + '/num/' + num + '/order/' + order + '/page/' + paged; } else { var url = '/list/' + scode + '/page/' + paged; } return api_request(url); }, //獲取指定內(nèi)容 get_content: function(id){ var url = '/content/' + id; return api_request(url); }, //獲取指定內(nèi)容多圖 get_content_pics: function(id){ var url = '/cms/pics/id/' + id; return api_request(url); }, //獲取搜索結(jié)果 get_search_resault: function(parm,num,order){ if ((num != '') && (order == '')) { var url = '/cms/search/' + 'num/' + num; } else if ((num == '') && (order != '')) { var url = '/cms/search/' + 'oder/' + order; } else if ((num != '') && (order != '')) { var url = '/cms/search/num/' + num + '/order/' + order; } else { var url = '/cms/search/'; } return api_request(url, 'POST', parm); }, //提交留言 add_message: function(parm){ var url = '/cms/addmsg'; return api_request(url, 'POST', parm); }, //獲取留言內(nèi)容 get_message: function(num){ var url = '/cms/msg/num/' + num; return api_request(url); }, //獲取留言內(nèi)容第*頁(yè) get_message_paged: function(num,paged){ var url = '/cms/msg/num/' + num + '/page/' + paged; return api_request(url); }, //提交表單 add_form: function(fcode,parm){ var url = '/cms/addform/fcode/' + fcode; return api_request(url, 'POST', parm); }, //獲取表單內(nèi)容 get_form: function(fcode){ var url = '/cms/form/fcode/' + fcode; return api_request(url); }, //獲取表單內(nèi)容第*頁(yè) get_form_paged: function(fcode,num,paged){ var url = '/cms/form/fcode/' + fcode + '/num/' + num + '/page/' + paged; return api_request(url); }, }
4、完成了,就這么簡(jiǎn)單。
下面說明一下調(diào)用的方法:
1、在需要調(diào)用數(shù)據(jù)的js頁(yè)面引入api文件,例如手頁(yè)的index.js
const api = require('../../utils/api.js'); //路徑根據(jù)自己的實(shí)際情況調(diào)整
2、在生命周期函數(shù)--監(jiān)聽頁(yè)面加載函數(shù)中使用api模塊。
/** * 生命周期函數(shù)--監(jiān)聽頁(yè)面加載 */ onLoad: function (options) { var that = this; //劃重點(diǎn),這句千萬不要忘掉了。 //api.模塊函數(shù).then...來調(diào)用,這里companyinfos()是調(diào)用公司信息 api.companyinfos().then(function (rs) { //通過setData把獲取到的數(shù)據(jù)賦值到頁(yè)面初始數(shù)據(jù)的data對(duì)象,這樣就可以在wxml中使用數(shù)據(jù)了。 that.setData({ companyinfos: rs.data, }) //把獲取的數(shù)據(jù)輸出到控制臺(tái)看看,實(shí)際使用的時(shí)候刪除掉下面這行 console.log(rs.data); }) },
3、控制臺(tái)截圖,可以看到公司信息的數(shù)據(jù)獲取成功,接下來就是綁定數(shù)據(jù)到頁(yè)面的事情了。
4、POST請(qǐng)求的使用方法。同樣在生命周期函數(shù)--監(jiān)聽頁(yè)面加載函數(shù)中使用api模塊。
//手先聲明一個(gè)對(duì)象,用來存儲(chǔ)需要通過POST傳遞過去的參數(shù)。比如搜索的keyword,scode,留言的字段等。 //這里演示的是搜索模塊,聲明對(duì)象,POST搜索的關(guān)鍵詞和指定分類。 var search_obj = { 'keyword': '模板', 'scode': '3,5', }; //get_search_resault需要傳入 搜索對(duì)象(也就是剛才聲明的),返回條數(shù),排序方式。 //這里演示需要獲取的是分類3和5中的,關(guān)鍵詞是模板的5條信息。 api.get_search_resault(search_obj, 5, 'id').then(function (rs) { that.setData({ search: rs.data, }) console.log(rs.data); })
5、看看控制臺(tái)的截圖。
可以看到,已經(jīng)獲取到分類3和分類5中的,關(guān)鍵詞是“模板”,并且按照id進(jìn)行排序的前5條數(shù)據(jù)了。
有關(guān)我們服務(wù)的更多信息,請(qǐng)聯(lián)系項(xiàng)目經(jīng)理
15899750475 楊先生