Vue--第十天

终极实战----大事件项目

1.简介:

2.创建项目:

1.创建(159-163):

还是对着视频操作吧

2.路由:

3.element Plus:

导入element Plus 后不需要再导入插件配置,就连组件导入也不用

4.pinia构建用户仓库和持久化:

持久化:

单独管理和导出:

5.数据交互-请求工具设计:

配置:

import axios from 'axios'

import {ElMessage} from 'element-plus'

import router from '@/router'

import { useUserStore } from '@/store'

const baseURL = 'http://big-event-vue-api-t.itheima.net'

const instance = axios.create({

  baseURL,

  timeout: 5000,

  headers: { 'X-Custom-Header': 'foobar' }

})

// 请求拦截器

instance.interceptors.request.use(

  (config) => {

    // TODO 2. 携带token

    const userStore = useUserStore()

    if (userStore.token) {

      config.headers.Authorization = userStore.token

    }

    return config

  },

  (err) => Promise.reject(err)

)

// 响应拦截器

instance.interceptors.response.use(

  (res) => {

    // TODO 3. 处理业务失败

    // TODO 4. 摘取核心响应数据

    if (res.data.code === 0) {

      return res

    }

    ElMessage.error(res.data.message || '服务异常')

    // 处理业务失败,给错误提示,异常抛出

    return Promise.reject(res.data)

  },

  (err) => {

    // TODO 5. 处理401错误

    // 错误的特殊情况 => 401 权限不足 或 token 过期  => 拦截到登录

    if (err.message?.status === 401) {

      router.push('/login')

    }

    // 错误的默认情况 => 只要给提示

    ElMessage.error(err.response.data.message || '服务异常')

    return Promise.reject(err)

  }

)

export default instance

// 其实这里导出基础路由我不是很理解

export { baseURL }

6.整体路由设计:

7.登录页加载:

8.校验:

9.预校验:

注意:在我们开始导入组建的时候,我们是按需导入的,所以我们不用在第二次在页面中导入。像这种做法就是错的。

我们可以这么做:再eslintrc中声明全局变量,解决ElMesage报错问题

  • 21
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值