(近期有时间,也饿,接点小型微信小程序私活填肚子)
建议封装自己的HTTP请求,使用方便并且多少可以减少代码量:
function HttpRequst(loading, url, sessionChoose, sessionId, params, method, ask, callBack) {
if (loading == true) {
wx.showToast({
title: '数据加载中',
icon: 'loading'
})
}
var paramSession = [{},
{
'content-type': 'application/json',
'Cookie': 'JSESSIONID=' + sessionId
},
{
'content-type': 'application/json'
},
{
'content-type': 'application/x-www-form-urlencoded',
'Cookie': 'JSESSIONID=' + sessionId
},
{
'content-type': 'application/x-www-form-urlencoded;charset=utf-8',
'Cookie': 'JSESSIONID=' + sessionId
}
]
wx.request({
url: baseUrl + url,
data: params,
dataType: "json",
header: paramSession[sessionChoose],
method: method,
success: function(res) {
console.log(res);
console.log(res.data.statusCode);
if (loading == true) {
wx.hideToast();
}
if (res.data.needLogin == true) {
wxLogin2(loading, callBack);//在此做自己的wx.login
}
if (res.data.needLogin != true) {
callBack(res.data);
}
},
complete: function() {
if (loading == true) {
wx.hideToast();
}
}
})
}
我们可以在能够使用 HttpRequst 的地方很简单的发出请求,并预定callback函数:
util.HttpRequst(true, "house/report.do", 4, wx.getStorageSync("sessionId"), params, "POST", false, _this.sthAfterReport);
利用微信提供的API—getSession,我们可以在小程序端对session过期做相应处理,这可以解决用户注销并切换用户登录的时候,系统需要更新用户的问题:
在app.js-onLaunch()方法中:
wx.checkSession({
success: function (res) {
console.log("处于登录态");
console.log(wx.getStorageSync('sessionId'));
},
fail: function (res) {
wx.removeStorageSync('sessionId');//在此可以在用户切换登录的时候,将保存在缓存中的session信息删除.
console.log("处于非登录态");
}
})
在后端我们可以对请求进行拦截,针对不同的框架有不同的实现方法,这里以后端请求filter为例:
/*
*当小程序端接收到needLogin == true的标记时,触发wx.login()方法,在后端login方法中,将user信息加入session中并将sessionId传回小程序端保存,可以通过wx.setStorageSync()方法保存到微信端缓存当中.
*若session中存在user信息,则可以继续进行请求的操作.
/
User user = (User)req.getSession().getAttribute("user");
if(null == user){
res.put("needLogin", true);
return res;
}
//后端login.
map.put("sessionId", req.getSession().getId());
//前端login.
wx.setStorageSync('sessionId', res.sessionId);
大致流程汇总说明:
新用户初次登录,小程序端----发送https-request----->服务端.
filter获取user为空,返回needLogin为true的标识.
小程序端调用wx.login().
服务端将session信息放到response.
小程序端将session信息保存到缓存.
小程序端之后的request调用,都在request里附加session信息.
服务端根据session信息取出user对象,进行后续操作.