微信小程序带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