参考:官方文档-发起网络请求。
axios模块化二次封装
模块化设计请求
1、http.js文件封装请求Promise函数
/**
* 拦截器配置
*/
uni.addInterceptor('request', {
// request 触发前
invoke(req) {
console.log("拦截器-请求前的数据:", req);
return req;
},
//请求成功后
success(res) {
console.log("拦截器-请求成功后:", res);
},
//请求失败
fail(err) {
console.log('"拦截器-请求失败后', err)
},
// 请求完成后
complete(resp) {
/**
//token验证失败
r.code = 100; //前端如果发现是100就跳转登录页
*/
console.log('拦截器-请求完成后', resp)
}
})
/**
* GET方法封装
* @param {String} url 请求地址
* @param {Object} data 请求的数据
*/
export function GET(url, data) {
return new Promise((resolve, reject) => {
uni.request({
url,
method: 'GET',
data: data || {},
header: {
//添加token请求头
'Authorization': uni.getStorageSync('token')
},
success: (res) => {
resolve(res.data)
},
fail: (err) => {
reject(err)
}
})
})
}
/**
* POST方法封装
* @param {String} url 请求地址
* @param {Object} data 请求的数据
*/
export function POST(url, data) {
return new Promise((resolve, reject) => {
uni.request({
url: url,
method: 'POST',
data: data || {},
header: {
'content-type': 'application/json',
//添加token请求头
'Authorization': uni.getStorageSync('token')
},
success: (res) => {
resolve(res.data)
},
fail: (err) => {
reject(err)
}
})
})
}
2、集中管理定义url地址变量
/**
* API接口地址
* RESTful风格接口地址
*/
// 前缀
const prefix = 'http:127.0.0.1:8888'
export const URLS = {
//用户管理
login: {
in: prefix + '/users/login', //登录
out: prefix + '/users/logout', //退出登录
},
//系统设置
setting: {
roles: prefix + '/roles', //角色
users: prefix + '/users', //用户
menu: prefix + '/menu', //菜单
region: prefix + '/region', //地区
depts: prefix + '/depts', //部门
rolePermissions: prefix + '/rolePermissions', //角色权限
webset: prefix + '/siteset/webset', //网站配置
elicon: prefix + '/elicon', //el-element图标
jwt: prefix + '/jwt', //JWT token密钥
},
}
3、模块接口js文件中引入http.js和url.js
import {
GET,
POST
} from '@/api/http.js'
//引入地址变量
import {
URLS
} from "@/api/url.js"
export default {
//用户登录
login(p) {
return POST(`${URLS.login.in}`, p)
}
}
4、index.js文件引入各个模块接口js文件
/**
* 这里数据请求的唯一入口
*/
import login from '@/api/login.js'
export default {
login,
}
5、main.js引入我们封装的index.js文件,并在vue上全局挂载
// 设置一个全局请求参数$api
import api from '@/api/index.js'
Vue.prototype.$api = api
6、在项目中通过this.$api进行调用
async submit() {
let valid = await this.$refs.form.validate()
if (!valid) return
console.log('this.form', this.form);
let res = await this.$api.login.login(this.form)
console.log('登录后的返回信息', res);
}