element admin 中的请求

1,703 阅读2分钟

首先配置好element admin 中的代理

为了解决后续跨域问题

devServer: {
        port: port,
        open: false,
        overlay: {
            warnings: false,
            errors: true
        },
        proxy: {
            '/dev-api': {
                target: '#####', //目标地址
                ws: true, //// 是否启用websockets
                changeOrigin: true, //开启代理:在本地会创建一个虚拟服务端,然后发送请求的数据,并同时接收请求的数据,这样服务端和服务端进行数据的交互就不会有跨域问题
                pathRewrite: {
                    '^/dev-api': ''
                }
            },
        },
        //mock 测试专用
        // before: require('./mock/mock-server.js')
    },

写一个登录请求

login.vue 填写表单后面,调用下面方法

      handleLogin() {
        this.loading = true
        this.$store.dispatch('user/login', this.loginForm).then((error) => {
          this.loading=false;
          this.$router.push({
            path: this.redirect || '/'
          });
          // 正常情况error 走catch ,这边采用后端
          this.errorMsg=error
          
        }).catch(() => {
          console.log("错误")
          this.loading = false;

        })
      },


andleLogin 提交给vuex 异步处理(user.js)

const action {
        login({ commit }, userInfo) {
        //接受传递参数,通过es 6 新语法取出 {a}=res;
        const { username, password } = userInfo
        return new Promise((resolve, reject) => {
            // 将json 字符串转化为x-from
            let user = querystring.stringify({ username: username.trim(), password: password })
            login(user).then(response => {

                if (response.respCode == 10000) {
                    const { respData } = response;
                    commit('SET_TOKEN', respData.sessionId)
                    setToken(respData.sessionId)
                }
                //向拦截器传递错误信息,可以选择性写
                let loginError = response.respData.fail;
                resolve(loginError);
            }).catch(error => {
                reject(error)
            })
        })
    },
}

登录api 如下

//这里request.js 中 后续在讲是admin 的请求拦截器
import request from '@/utils/request'

//login/login.vue 执行逻辑
export function login(data) {
    return request({
        url: '/manage/user/login',
        //此处admin是代理
        method: 'post',
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded'
        },
        data
    })
}

写一个获取用户信息接口

get 请求通过token获取相关用户信息

 "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJhdXRoMCIsImV4cCI6MTU5MDM2MDI2MywidXNlcm5hbWUiOiJoc2gifQ.KROTWi1Nm82C10TmiiMihkp9T3GhNMKegWx0s1rTrvc"

//具体业务可以根据实际情况删减
 getInfo({ commit, state }) {
        return new Promise((resolve, reject) => {
            getInfo(state.token).then(response => {


                const { respData } = response

                if (!respData) {
                    reject('认证失败,请重新登录')
                }

                const { roles, name, avatar, introduction } = respData

                // roles must be a non-empty array
                if (!roles || roles.length <= 0) {
                    reject('getInfo: roles must be a non-null array!')
                }

                commit('SET_ROLES', roles)
                commit('SET_NAME', name)
                commit('SET_AVATAR', avatar)
                commit('SET_INTRODUCTION', introduction);
                resolve(respData)
            }).catch(error => {
                reject(error)
            })
        })
    },

api 中user.js

export function getInfo(token) {
    return request({
        url: '###########',
        //此处admin是代理
        method: 'get',
        //baseURL: 'https://some-domain.com/api/',配置基本url
        params: { token }
    })
}

一个简单的get 请求获取token基本搭建完成,现在我们需要注意点,要将token配置到请求头

import axios from 'axios'
import { MessageBox, Message } from 'element-ui'
import store from '@/store'
import { getToken } from '@/utils/auth'

axios.defaults.headers.post['Content-Type'] = 'application/json;charset=utf-8';

// create an axios instance
const service = axios.create({
    baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url
    // withCredentials: true, // send cookies when cross-domain requests
    timeout: 10000 // request timeout
})

// request interceptor
//配置发送请求
service.interceptors.request.use(
    config => {

        config.headers.common.Authorization = getToken();
        return config
    },
    error => {
        // do something with request error
        console.log(error) // for debug
        return Promise.reject(error)
    }
)

// response interceptor
//配置接受请求
service.interceptors.response.use(
  
    response => {
        const res = response.data;
        // if the custom code is not 20000, it is judged as an error.
        if (res.respCode == 99999) {
            Message({
                message: res.respDesc || 'Error',
                type: 'error',
                duration: 5 * 1000
            })

        } else {
            return res
        }

    },
    error => {
        console.log('err' + error) // for debug
        Message({
            message: error.message,
            type: 'error',
            duration: 5 * 1000
        })
        return Promise.reject(error)
    }
)

export default service