微信小程序帶cookie的request請求可,以使服務端知道是同一個客戶端請求. session_id會不變,從而很好的使用服務端的session.
寫一個工具函數,直接導入使用即可,接口同 wx.request 。會自動設置和更新 cookie。
const request = function (obj) { //設置cookie緩存 if(obj.fail){ obj.fail = function(err){ wx.setStorageSync('cookie', err.header['Set-Cookie']); obj.fail(err); }; } else{ obj.fail = function (err) { wx.setStorageSync('cookie', err.header['Set-Cookie']); }; } if(obj.success){ obj.success = function (res) { wx.setStorageSync('cookie', res.header['Set-Cookie']); obj.success(res); }; } else{ obj.success = function (res) { wx.setStorageSync('cookie', res.header['Set-Cookie']); }; } //設置請求頭 if(obj.header){ obj.header = { 'Cookie': wx.getStorageSync('cookie'), "Content-Type": "application/x-www-form-urlencoded", ...obj.header }; } else{ obj.header = { 'Cookie': wx.getStorageSync('cookie'), "Content-Type": "application/x-www-form-urlencoded", }; } wx.request(obj); }; module.exports = { request: request };
下面是我自己封裝的 util.js :
const Promise = require('./es6-promise.js');
//封裝Request請求方法
function requst(url, method, data = {}) {
const app = getApp();
if (app.globalData.token)
{
//console.log("token有值:" + app.globalData.token);
data.token = app.globalData.token;
}
wx.showNavigationBarLoading()
data.method = method
return new Promise((resove, reject) => {
wx.request({
url: url,
data: data,
header: {
'Cookie': wx.getStorageSync('cookie'),
"Content-Type": "application/x-www-form-urlencoded",
},
method: method, // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
success: function (res) {
wx.hideNavigationBarLoading()
wx.setStorageSync('cookie', res.header['Set-Cookie']);
resove(res.data)
},
fail: function (msg) {
console.log('reqest error', msg)
wx.hideNavigationBarLoading()
wx.setStorageSync('cookie', res.header['Set-Cookie']);
reject('fail')
}
})
})
}
module.exports = {
requst: requst,
}
使用:
var util = require("../../../utils/util");//工具類 /** * 獲得收藏商家列表 */ getFavoriteShop: function (e) { wx.showToast({ title: '加載中...', icon: 'loading' });//顯示加載框 let that = this; let url = host + "api/prints/user/favoriteshoplist"; let method = method; let data = { "user_id": user_id, "page": this.data.page, "size": this.data.size, } let result = util.requst(url, method, data); result.then(function (res) { wx.hideToast();//隱藏加載框 console.log(res); if (res.code == 0) { let shop_list = res.data; //數組合並 that.data.shop_list = that.data.shop_list.concat(shop_list); that.data.page++; that.setData({ shop_list: that.data.shop_list, page: that.data.page }); } else { wx.showToast({ title: res.msg, icon: 'none', duration: 1000, mask: true }); return false; } }).catch(function (res) { wx.hideToast();//隱藏加載框 //console.log(res); }); },
轉: https://www.jianshu.com/p/b4740ac347cd
