解构前端登录请求
封装request API
文中@一律代表 src目录
首先对请求地址进行封装,将请求与页面解构。在@/api/user.js中封装了与用户登录,信息查找等相关的前端请求
import request from '@/utils/request'
export function login(data) {
return request({
url: '/login',
method: 'post',
data, //发生给后端的数据,没有就填null
})
}vuex进行状态管理
在vuex中封装一个与user操作有关的状态,
const getDefaultState = () => {
return {
token: getToken(), //状态,用于判断当前是否已经登录
username: '',
}
}
const state = getDefaultState()
const mutations = {
RESET_STATE: (state) => {
Object.assign(state, getDefaultState())
},
SET_TOKEN: (state, token) => {
state.token = token //设置当前状态
},
}登录的异步操作
在html页面中启动异步操作,
loginForm是登录组件的一个表单使用
dispatch启动异步的vuex任务,这里action的名字取决于namespaced由于是登录操作,异步请求后不会得到数据,有数据也被放在vuex里了,因此
then之后可以进行其他操作
这里只注册了一个login的操作,当进行login操作的时候,返回一个promise对象,promise对象中调用@/api/user.js中的login请求;后台响应的数据首先在@/utils/request.js中会被拦截,如果请求没有出错的话将会返回一个response的Promise,否则返回一个Error的Promise
正常响应的数据在
then方法中被捕获到,根据响应的数据提交commit设置vuex的状态,同时调用setToken设置cookie;最后将响应数据交给页面异常的响应或者自定义的错误,由于Promise的链传递性最终将会被
catch捕获
响应拦截
正常响应代码为0
当响应出错时,返回一个
reject,并且reject中是一个Error对象
Last updated
Was this helpful?