• 前端通用后台登录解决方案(一站式解决封装axios模块、接口请求模块、登录请求动作、本地缓存处理、登录鉴权解决)


    目录

    封装 axios 模块

    封装接口请求模块

    封装登录请求动作

    触发登录动作

    本地缓存处理方案

    响应数据的统一处理 

    登录鉴权解决方案


    封装 axios 模块 💨 

    我们希望封装出来的 axios 模块,至少需要具备一种能力,那就是:根据当前模式的不同,设定不同的 BaseUrl ,因为通常情况下企业级项目在 开发状态 和 生产状态 下它的 baseUrl 是不同的。

    我们可以在项目中创建两个文件:

    1.  .env.development 
    2.  .env.production 

    它们分别对应 开发状态 和 生产状态

    我们可以在上面两个文件中分别写入以下代码:

    .env.development

    1. # 标志
    2. ENV = 'development'
    3. # base api
    4. VUE_APP_BASE_API = '/api'

    .env.production

    1. # 标志
    2. ENV = 'production'
    3. # base api
    4. VUE_APP_BASE_API = '/prod-api'

    有了这两个文件之后,我们就可以创建对应的 axios 模块

    创建 utils / request.js ,我们在这里配置发送 axios 请求的基本信息,写入如下代码:

    1. import axios from 'axios'
    2. const service = axios.create({
    3. baseURL: process.env.VUE_APP_BASE_API,
    4. timeout: 5000
    5. })
    6. export default service

    这里 process.env.VUE_APP_BASE_API 可以根据当前模式的不同来设定我们前文设置好的 baseURL 

    有了 axios 模块之后,接下来我们就可以

    1. 封装接口请求模块
    2. 封装登录请求动

    封装接口请求模块 💨 

    创建 api 文件夹,我们把所有的接口请求模块都放到这个文件夹里,例如登陆注册是一个模块,请求首页文章信息是一个模块:

    创建 sys.js ,我们在这里编写登录的接口请求函数:

    1. import request from '@/utils/request'
    2. /**
    3. * 登录
    4. */
    5. export const login = data => {
    6. return request({
    7. url: '/sys/login',
    8. method: 'POST',
    9. data
    10. })
    11. }

    现在调用这个方法返回的就是一个promise对象 

    封装登录请求动作 💨 

    什么是登录请求动作呢,就是我们不想在登陆页面中直接调用接口请求方法,而是想把它封装在vuex的模块里我们在 store 下创建 modules 文件夹,创建 user.js 模块,用于处理所有和用户相关的内容(此处需要使用第三方包 md5 )。

    modules/user.js:

    1. import { login } from '@/api/sys'
    2. import md5 from 'md5'
    3. export default {
    4. namespaced: true,
    5. state: () => ({}),
    6. mutations: {},
    7. actions: {
    8. login(context, userInfo) {
    9. const { username, password } = userInfo
    10. return new Promise((resolve, reject) => {
    11. login({
    12. username,
    13. password: md5(password)
    14. })
    15. .then(data => {
    16. resolve()
    17. })
    18. .catch(err => {
    19. reject(err)
    20. })
    21. })
    22. }
    23. }
    24. }

    注意:这里的md5是一种加密方法,用于加密密码,同学们可以 npm install 来安装。在user.js的actions中,我们把登录请求的动作封装好了,我们在返回的promise对象中调用接口请求模块 login,然后把参数传递进去,返回的promise实例我们通过 then 和 catch 进行接收。

    然后我们还需要在 store 的 index.js 中完成注册:

    1. import { createStore } from 'vuex'
    2. import user from './modules/user.js'
    3. export default createStore({
    4. modules: {
    5. user
    6. }
    7. })

     

    触发登录动作 💨 

    我们先看一下登录界面主要逻辑的代码: