小程序api封装(方法二)


在根目录新建http文件夹 新建 request.js文件 apiConfig.js文件

// request.js文件
const request = { // 将接口参数和公共参数合并
 buildParams(params) { // const uToken = wx.getStorageSync('uToken');
    const baseParams = { // 用户token
      uToken: wx.getStorageSync('uToken') }; return Object.assign({}, baseParams, params); }, // post请求
  postData(url, params, isToken = false) { // isToken 登录接口是否需要uToken
    const data = isToken ? params : this.buildParams(params); return new Promise((resolve, reject) => { wx.request({ url, method: 'POST', data, header: { 'content-type': 'application/x-www-form-urlencoded' }, success(res) { // console.log('post', res);
          if(res.statusCode === 200) { resolve(res.data); } else { reject(res.errMsg); } }, fail(error) { console.log('error',error) wx.showToast({ title: '服务器内部错误', icon: 'none', duration: 1500 }) reject(error); }, complete() { setTimeout(() => { wx.hideLoading(); },1500) } }) }) }, // get请求
  getData(url, params, isToken = false) { // isToken 登录接口不需要uToken
    const data = isToken ? params : this.buildParams(params); return new Promise((resolve, reject) => { wx.request({ url, method: 'GET', data, header: { 'content-type': 'application/json' }, success(res) { // console.log('get', res);
          if(res.statusCode === 200) { resolve(res.data); } else { reject(res.errMsg); } }, fail(error) { console.log('error',error) wx.showToast({ title: '服务器内部错误', icon: 'none', duration: 1500 }) reject(error); }, complete() { setTimeout(() => { wx.hideLoading(); },1500) } }) }) } }; module.exports = request // export default request;
/** * 小程序配置文件 apiConfig.js */
// 此处主机域名是腾讯云解决方案分配的域名
const HOST_IP = "https://127.0.0.1:8080/xx" // IP地址
const HOST_TEST = "https://xx.xx.com/xx" //测试环境:
const HOST_PRO = "https://xx.xx.com/xx" //生产环境:
const HOST = HOST_TEST; // 替换host let config = { //*小程序各个接口*
  userLogin: `${HOST}/member/login.htm`, //用户登录

  // 返回上一页
  goBackOne: function () { let timer = setTimeout(function () { let pages = getCurrentPages(); //页面栈
      let currPage = pages[pages.length - 1]; //当前页面
      let prevPage = pages[pages.length - 2]; //上一个页面
 wx.navigateBack({ delta: 1 }) }, 2000) }, // 返回上一页并刷新上一页数据
  goBack: function () { let timer = setTimeout(function () { let pages = getCurrentPages(); //页面栈
      let currPage = pages[pages.length - 1]; //当前页面
      let prevPage = pages[pages.length - 2]; //上一个页面
      prevPage.getData(); //直接调用上一个页面的方法刷新
 wx.navigateBack({ delta: 1 }) }, 2000) }, //不返回上一页 但是刷新上一页
  goPerPage: function () { let pages = getCurrentPages(); //页面栈
    let currPage = pages[pages.length - 1]; //当前页面
    let prevPage = pages[pages.length - 2]; //上一个页面
    prevPage.getData(); //直接调用上一个页面的方法刷新
 } }; module.exports = config

然后再在app.js扩展 通过扩展 Page 页面对象实现

 

//app.js // import request from "./http/request" export default request 方式需要 import 进来
const request = require('./http/request'); const apiConfig = require('./http/apiConfig'); App({ onLaunch: function () { console.log('小程序启动完毕') // 展示本地存储能力
    var logs = wx.getStorageSync('logs') || [] logs.unshift(Date.now()) wx.setStorageSync('logs', logs) // 通过扩展 Page 页面对象实现常见需求
    const originalPage = Page; console.log('Page', request) Page = function (pageConfig) { pageConfig.$request = request; pageConfig.$config = apiConfig; return originalPage(pageConfig); }; this.$request = request; this.$config = apiConfig; console.log('Page', this, Page)
// 登录 wx.login({ success: res => { // 发送 res.code 到后台换取 openId, sessionKey, unionId } }) try { const res = wx.getSystemInfoSync() console.log(res, '设备信息对象') this.globalData.deviceInfo = res; } catch (e) { // Do something when catch error } // 获取用户信息 wx.getSetting({ success: res => { if (res.authSetting['scope.userInfo']) { // 已经授权,可以直接调用 getUserInfo 获取头像昵称,不会弹框 wx.getUserInfo({ success: res => { // 可以将 res 发送给后台解码出 unionId this.globalData.userInfo = res.userInfo // 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回 // 所以此处加入 callback 以防止这种情况 if (this.userInfoReadyCallback) { this.userInfoReadyCallback(res) } } }) } } }) }, globalData: { userInfo: null, deviceInfo: {} } })

 

页面调用也分两种情况 一种是组件页面一种是正常的page页面

  // 正常页面调用接口
  login:function(event){ let self = this; wx.showLoading({ title: '正在登录', mask: true }) let opt = { name: 'self.data.userName', pwd: 'self.data.userPas', } // wx.redirectTo({
    // //关闭当前页面,跳转到应用内的某个页面。但是不允许跳转到 tabbar 页面
    // url: '/pages/index/index'
    // })
 wx.hideLoading();
    console.log(this,this.$request,'this.$request') this.$request.postData(this.$config.userLogin, opt, true).then(res => { console.log('res',res); if (res.returnResult === 200){ // 缓存用户
        wx.setStorageSync('uToken', res.returnData); wx.showToast({ title: '登录成功', icon: 'success', mask: true, duration: 1000 }) setTimeout(() => { wx.switchTab({ url: '/pages/tabBar/myPage/myPage' }) }, 500) } else { self.setData({ userPas: '' }) wx.showToast({ title: (res.returnModelInfo || {}).message || res.returnDetail || '服务器内部错误', icon: 'none', duration: 2000 }) } }) },

组件里面调用

注意这里得先在 Component 上面拿到app实例  const app = getApp() 

let opt = {}; // 接口入参 console.log('this.$request', app, this.$request) app.$request.post(app.$config.xxx, opt).then(res => { console.log('res', res) if (res.success) {

} }).
catch(error => { console.log('error', error) })

注意小程序还可以使用用混入逻辑(公共js部分)

// 组件内调用
var myBehavior = require('../../../mixins/my-behavior')

使用 behaviors: [myBehavior], 类似vue 的 mixins

原创未经允许不得转载!!!转载请注明出处~谢谢合作;


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM