微信小程序前后端交互流程

(近期有时间,也饿,接点小型微信小程序私活填肚子)

建议封装自己的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对象,进行后续操作.

没有更多推荐了,返回首页