在根目录新建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
})
}
})
},
来源:oschina
链接:https://my.oschina.net/u/4369262/blog/4279361