目录结构(根目录开始)
├── api# 所有请求
│└── user.js# 用户请求api
├── store# 全局store管理
│└── modules# api模块
││└── user.js# 用户请求模块
│└── index.js# 状态管理初始化
├── utils# 全局公用方法
│├── auth.js# 本地缓存
│├── env.js# 公共参数
│└── request.js# 网络请求中间件
└── main.js# 入口文件 加载组件 初始化等
下面是文档内容
api/user.js(用户请求api)
// 引用网络请求中间件
import request from './../utils/request';
/**
*登陆请求
*/
export function login(data) {
return request({
url: '/user/login',
method: 'POST',
data
})
}
【vue|uni-app网络请求封装(完整版)】store/modules/user.js(用户请求模块)
// 引用用户请求api
import {login} from '../../api/user';
import {setToken} from '../../utils/auth';
//下面我是示例的微信小程序的参数,可自行修改请求参数
const actions = {
login({commit}, param) {
return new Promise((resolve, reject) => {
login({
iv: param.iv,// 请求参数(可自行修改)
code: param.code // 请求参数(可自行修改)
}).then(response => {
// 这里可以自己添加方法
// 保存获取到的token到本地之类的
// 必须在resolve之前执行
setToken(response.token) //将获取到的token保存到本地
resolve(response)
}).catch(error => {
console.log(error)
})
})
}
};
export default {
namespaced: true,
actions
}
store/index.js(状态管理初始化配置)
import Vue from 'vue'
import Vuex from 'vuex'
import user from './modules/user'Vue.use(Vuex)
const store = new Vuex.Store({
modules: {
user
}
});
export default store
utils/auth.js(本地缓存配置)
const TokenKey = 'token';
// 认证令牌
export function getToken() {
return uni.getStorageSync(TokenKey)
}export function setToken(token) {
return uni.setStorageSync(TokenKey, token)
}export function removeToken() {
return uni.removeStorageSync(TokenKey)
}
utils/env.js(公共参数)
"use strict";
// 变量可自行添加修改
export default { //存放变量的容器
appid: '****',
baseUrl: 'http://**.***.***.***'
}
/**
*appid :小程序appid
*baseUrl :服务端域名
*/
utils/request.js(网络请求中间件)
import {getToken,removeToken} from '../utils/auth';
import env from '../utils/env';
function service(options = {}) {
options.url = `${env.baseUrl}${options.url}`;
// 判断本地是否存在token,如果存在则带上请求头
if (getToken()) {
options.header = {
'content-type': 'application/json',
'Authorization': `${getToken()}` // 这里是token(可自行修改)
};
} return new Promise((resolved, rejected) => {
options.success = (res) => {
// 如果请求回来的状态码不是200则执行以下操作
if (res.data.code !== 200) {
// 非成功状态码弹窗
uni.showToast({
icon: 'none',
duration: 3000,
title: `${res.data.msg}`
});
// 登陆失效
if (res.data.code === 403) {
// 清除本地token
removeToken()
// 关闭所有页面返回到登录页
uni.reLaunch({
url: '/pages/login/login'
})
}
// 返回错误信息
rejected(res)
} else {
// 请求回来的状态码为200则返回内容
resolved(res.data.data)
}
};
options.fail = (err) => {
// 请求失败弹窗
uni.showToast({
icon: 'none',
duration: 3000,
title: '服务器错误,请稍后再试'
});
rejected(err);
};
uni.request(options);
});
}export default service;
页面上使用demo(login.vue)
******
>
export default {
data() {
return {}
},
onLoad() {},
methods: {
loginBut: function() {
// 调用状态管理内的函数请求
// user是store/index.js下定义的user名称,login是user这个文件内的请求函数
// code跟iv是传送到store/modules/user.js下login函数内的参数
this.$store.dispatch('user/login', {
iv: value[0][1].iv,
code: value[1].code
}).then(result => {
// 登陆成功的结果
console.log(result)
})
},
}
}
******
完结~
不懂的可留言~
推荐阅读
- vue|vue.cli项目封装全局axios,请求封装,封装公共的api和调用请求
- javascript|Vue3+vben admin后台管理系统接口封装
- axios组件封装|手把手讲解Vue + Element UI实现后台管理系统(三)(常用模块引入及组件封装(axios数据请求接口封装))
- vue.js|使用vue-cli搭建SPA项目
- axios|axios基本的使用
- vue|Vue项目的记录(四)
- vue|Vue项目的记录(三)
- vue|vue3.0 + element-plus + 上传图片到七牛云
- 区块链探索|[Near Protocol] Near开发Demo浅析-Gamble Game Near(二)(Dapp)