一、目标
1.简单的封装axios;
2.简单的编写mock模拟接口;
3.简单的集合vue、axios、mock实现模拟请求数据返回;
实现案例:通过mock模拟数据在点击登录后返回mock自定义的用户信息
二、实现
1.安装axios(npm install axios --s),在src下新建utils目录(工具目录),在utils下新建request.js文件为axios的封装文件。(其中拦截器可以在axios文档中获取,设置拦截器是为了配合mock)
// 封装axios,将一大串请求配置代码封装成一个http实例,调用http等同于使用一次axios请求
// 引入axios
import axios from 'axios'
// 创建axios实例http
const http = axios.create({
// 所有api父目录
baseURL: '/api',
// 超时停止请求
timeout: 10000,
})
//拦截器
axios.interceptors.request.use(function (config) {
// 在发送请求之前做些什么
return config;
}, function (error) {
// 对请求错误做些什么
return Promise.reject(error);
});
// 添加响应拦截器
axios.interceptors.response.use(function (response) {
// 2xx 范围内的状态码都会触发该函数。
// 对响应数据做点什么
return response;
}, function (error) {
// 超出 2xx 范围的状态码都会触发该函数。
// 对响应错误做点什么
return Promise.reject(error);
});
// 暴露http实例
export default http
2.安装mockjs(npm install mockjs --s),在src目录下创建api目录,在api目录中创建index.js文件和mock.js文件和mockServeData文件。
在mockServeData目录下创建一个mock模拟接口permission.js文件:其中返回的data数据是自定义的。(mock支持生成随机数据
import Mock from 'mockjs'
export default {
getUser: config => {
//对前端请求携带的数据进行判断并返回何种data数据
const { username, password } = JSON.parse(config.body)
// 先判断用户是否存在
// 判断账号和密码是否对应
if (username === 'kkly' && password === '123456') {
return {
code: 20000,
data: {
baseInfor: {
circleUrl: '../assets/bg/user.jpg',
username: 'KKLY',
gender: '1',
birthday: '2003-04-24',
favorite: ['programming', 'games', 'tennis ball'],
quote: 'horizon your eyes'
},
token: Mock.Random.guid(),
message: '获取成功'
}
}
} else if (username === 'admin' && password === '123456') {
return {
code: 20000,
data: {
baseInfor: {
circleUrl: '../assets/bg/user2.jpg',
username: 'admin',
gender: '0',
birthday: '2013-06-24',
favorite: ['painting', 'study', 'football'],
quote: 'keep alive'
},
token: Mock.Random.guid(),
message: '获取成功'
}
}
} else {
return {
code: -999,
data: {
message: '密码错误'
}
}
}
}
}
在mock.js文件中引入mockjs和permission:
import Mock from 'mockjs'
import permission from './mockServeData/permission'
//这是登录接口,方法为post,第一个参数为模拟接口地址,与index定义的方法地址一致,需要转义,第三个参数为模拟接口的方法
Mock.mock(/api\/permission\/getUser/,'post',permission.getUser)
3.mock模拟接口写好后,就需要在api目录下的index.js中定义请求的一个方法 :
import http from "@/utils/request";
//引入axios实例http
//定义并暴露getUser数据请求方法,data参数为前端向后端发送请求携带的数据,如登录表单中的username和password,发送请求并return返回后端给的数据
export const getUser = (data) =>{
return http.post('/permission/getUser',data)
}
3.在login组件中引入getUser方法,并调用:
methods: {
submitForm() {
this.$refs.loginForm.validate((isPass) => { //验证表单信息内容
if (isPass) { //当表单内容符合 rule则isPass为true
getUser(this.loginForm).then(({ data }) => { //后端接口进行判断查找是否存在这个用户,并返回失败或成功的data数据
console.log(data)
if (data.code === 20000) { //返回的数据中的code属性为2000时则表示存在这个用户则可以跳转到home页面
Cookie.set('token', data.data.token); //将用户携带的token赋值给Cookie中的‘token’,在导航守卫中
this.$router.push('/home'); //点击登入后路由跳转到home首页,即to指向的页面
this.$store.commit('setUser',data.data.baseInfor) //将用户信息保存到store中
} else if (data.code === -999) {
this.$message.error(data.data.message)
}
})
}
})
},