最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue中Vue router和axios的封裝使用教程

 更新時(shí)間:2023年11月22日 15:05:51   作者:愛吃奶酪的松鼠丶  
當(dāng)用戶登錄后,后臺會返回一個(gè)token給前端,前端下次進(jìn)入首頁后,會先判斷token是否過期,如果過期自動進(jìn)入登錄頁面,本文給大家介紹Vue中Vue router和axios的封裝使用教程,感興趣的朋友一起看看吧

模擬場景:

當(dāng)用戶登錄后,后臺會返回一個(gè)token給前端,前端下次進(jìn)入首頁后,會先判斷token是否過期,如果過期自動進(jìn)入登錄頁面。

配置路由:

1.安裝

npm install vue-router@4

2.安裝后在src目錄下創(chuàng)建router文件夾,并創(chuàng)建index.js 代碼如下:

// vue-router中提供3種的路由模式
import { createWebHistory, createRouter } from 'vue-router'
import { checktoken } from '../request/api';
const routes = [
  {
    path: '/',
    name: "home",
    component: () => import('../components/Pages/Home.vue'),
  },
  {
    path: '/login',
    name: 'login',
    component: () => import('../components/Pages/Login.vue'),
  }
]
const router = createRouter({
  // 路由的模式
  history: createWebHistory(),
  // 路由規(guī)則
  routes
})
//導(dǎo)航守衛(wèi) 導(dǎo)航前做點(diǎn)操作
router.beforeEach(async (to, from, next) => {
  // 編寫一個(gè)函數(shù)來檢查 token 是否有效
  if (to.name == 'home' && await checkTokenValidity()) {
    // 如果進(jìn)入首頁且未認(rèn)證,則重定向到登錄頁
    next({ name: 'login' });
  } else {
    // 其他情況允許通過
    next();
  }
});
async function checkTokenValidity() {
  // 獲取 token
  const token = localStorage.getItem('token');
  if (token) {
    // 使用 ' ' 分割字符串
    const arr = token.split(' ');
    let tokenstr = arr[1];
    return await checktoken({ token: tokenstr })
  }
  return true
}
export default router

配置axios:

1.安裝

npm install axios

2.在src中創(chuàng)建request文件夾,并創(chuàng)建http.js和api.js

3.http.js用于封裝axios實(shí)例 代碼如下:

// 在http.js中引入axios
import axios from 'axios'; // 引入axios
import { ElMessage } from 'element-plus'
const config={
    // `url` 是用于請求的服務(wù)器 URL
   url: '/api',
   // `baseURL` 將自動加在 `url` 前面,除非 `url` 是一個(gè)絕對 URL。
   // 它可以通過設(shè)置一個(gè) `baseURL` 便于為 axios 實(shí)例的方法傳遞相對 URL
   baseURL: 'http://localhost:56030/api',
   // `timeout` 指定請求超時(shí)的毫秒數(shù)(0 表示無超時(shí)時(shí)間)
   // 如果請求話費(fèi)了超過 `timeout` 的時(shí)間,請求將被中斷
   timeout: 10000,
 }
const requests = axios.create(config);
//請求攔截器(可以在請求發(fā)出去之前,做一些事情)
requests.interceptors.request.use((config) => {
    return config;
  });
  //響應(yīng)攔截器(在數(shù)據(jù)返回之后,做一些事情)
  requests.interceptors.response.use(
    (res) => {
      return res.data;
    },
    (err) => {
        console.log(err);
        ElMessage.error(err.response.data)
    }
    )
export default requests;

4.api.js用于對接口的統(tǒng)一管理 代碼如下:

import requests from "./http";  //引入二次封裝的axios
export const login = (params)=>requests({url:'/Account/login ',method:'post',data:params});
export const checktoken = (params)=>requests({url:'/Account/checktoken ',method:'post',data:params});

對路由和封裝接口的使用

1.登錄login.vue組件,這里只看用法即可。 代碼如下:

<template>
  <el-card class="box-card">
    <el-text class="title" type="warning" size="large">Metadata科技屋</el-text>
    <div style="margin: 40px;"></div>
    <el-form label-position="top" label-width="100px" :model="formLabelAlign" style="max-width: 460px">
      <el-form-item label="賬號">
        <el-input v-model="formLabelAlign.accountNumber" />
      </el-form-item>
      <el-form-item label="密碼">
        <el-input v-model="formLabelAlign.password" type="password" />
      </el-form-item>
      <el-button class="loginbut" type="primary" @click="onSubmit">登錄</el-button>
    </el-form>
  </el-card>
</template>
<script setup>
import { reactive } from 'vue'
import { login } from '../../request/api';
import { ElMessage } from 'element-plus'
import { useRouter } from 'vue-router';
const router = useRouter();
const formLabelAlign = reactive({
  accountNumber: 'admin',
  password: '123456'
})
const onSubmit = async () => {
  var token = await login(formLabelAlign)
  if (token) {
    // 存儲 token    [Authorize(AuthenticationSchemes = "Bearer")]
    localStorage.setItem('token',"Bearer "+token);
    ElMessage({
      message: '登錄成功',
      type: 'success',
    })
    // 字符串路徑
    router.push('/');
  }
}
</script>
<style scoped>
.el-card {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}
.box-card {
  width: 480px;
  height: 320px;
}
.title {
  position: absolute;
  left: 50%;
  transform: translate(-50%, -50%);
}
.loginbut {
  float: right;
}
</style>

登錄成功后的路由跳轉(zhuǎn)需要引用這句代碼:

import { useRouter } from 'vue-router';
const router = useRouter();
 // 字符串路徑
router.push('/');

main.js代碼如下:

import { createApp } from 'vue'
// 圖標(biāo)和組件需要分開引入
import ElementPlus from 'element-plus';   // 引入 ElementPlus 組件
import 'element-plus/dist/index.css'
// Element Plus
import 'element-plus/theme-chalk/index.css'  // 引入 ElementPlus 組件樣式
import 'element-plus/theme-chalk/dark/css-vars.css'
import { Edit } from '@element-plus/icons-vue'  // 按需引入 Icon 圖標(biāo) 
import  router  from './router/index'
import App from './App.vue'
const app =  createApp(App)
app.use(router)
app.component('Edit', Edit)
app.use(ElementPlus)  // 全局掛載 ElementPlus
app.mount('#app')

app.vue代碼:

<script>
export default {
};
</script>
<template>
    <router-view></router-view>
</template>
<style scoped>
.common-layout
{
height: 100vh;
}
.el-container
{
  height: 100vh;
}
</style>

給出main.js代碼和app.vue代碼,可以更方便的看出路由的使用方式。

到此這篇關(guān)于Vue中Vue router和axios的封裝使用教程的文章就介紹到這了,更多相關(guān)Vue router和axios的封裝使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vuex的使用步驟

    vuex的使用步驟

    這篇文章主要介紹了vuex的使用步驟,幫助大家更好的理解和使用vue框架,感興趣的朋友可以了解下
    2021-01-01
  • VUE3 data()函數(shù)詳解

    VUE3 data()函數(shù)詳解

    Vue 3的data()函數(shù)是選項(xiàng)式 API 中聲明響應(yīng)式數(shù)據(jù)的入口,核心是通過返回對象配合 Proxy 實(shí)現(xiàn)響應(yīng)式,接下來通過本文介紹VUE3 data()函數(shù)的相關(guān)知識,感興趣的朋友跟隨小編一起看看吧
    2025-12-12
  • vue-devtools?開發(fā)工具插件之支持vue3?chrome?瀏覽器插件

    vue-devtools?開發(fā)工具插件之支持vue3?chrome?瀏覽器插件

    這篇文章主要介紹了vue-devtools?開發(fā)工具插件之支持vue3?chrome?瀏覽器插件,用這個(gè)版本主要是為了支持vue3?推薦直接下載,文中給大家提供了下載地址,感興趣的朋友跟隨小編一起看看吧
    2022-01-01
  • Vue-cli3多頁面配置詳解

    Vue-cli3多頁面配置詳解

    這篇文章主要介紹了Vue-cli3多頁面配置詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • 在Vue應(yīng)用中處理404頁面的解決方法

    在Vue應(yīng)用中處理404頁面的解決方法

    在現(xiàn)代的單頁面應(yīng)用(SPA)中,404錯(cuò)誤是不可避免的,當(dāng)用戶訪問一個(gè)無效的路由時(shí),我們希望能夠提供一個(gè)友好的404頁面,以改善用戶體驗(yàn),在這篇博客中,我們將探討如何在Vue應(yīng)用中處理404頁面,并提供示例代碼幫助你更好地理解這一過程,需要的朋友可以參考下
    2024-12-12
  • vue中動態(tài)select的使用方法示例

    vue中動態(tài)select的使用方法示例

    這篇文章主要介紹了vue中動態(tài)select的使用方法,結(jié)合實(shí)例形式分析了vue.js使用動態(tài)select創(chuàng)建下拉菜單相關(guān)實(shí)現(xiàn)技巧與操作注意事項(xiàng),需要的朋友可以參考下
    2019-10-10
  • Vue封裝svg-icon組件使用教程

    Vue封裝svg-icon組件使用教程

    SVG(Scalable?Vector?Graphics)可縮放矢量圖形,是一種用于描述基于二維的矢量圖形的?XML?標(biāo)記語言,其基本矢量顯示對象包括矩形、圓、橢圓、多邊形、直線、任意曲線等,還能顯示文字對象和嵌入式外部圖像
    2023-02-02
  • VUE預(yù)渲染及遇到的坑

    VUE預(yù)渲染及遇到的坑

    這篇文章主要介紹了VUE預(yù)渲染及遇到的坑,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-09-09
  • vue結(jié)合vue-electron創(chuàng)建應(yīng)用程序小結(jié)

    vue結(jié)合vue-electron創(chuàng)建應(yīng)用程序小結(jié)

    這篇文章主要介紹了vue結(jié)合vue-electron創(chuàng)建應(yīng)用程序,本文給大家介紹了安裝electron有兩種方式,兩種方式創(chuàng)建的項(xiàng)目結(jié)構(gòu)大不相同,需要的朋友可以參考下
    2024-03-03
  • Vue3實(shí)現(xiàn)一個(gè)可左右滑動操作組件的示例代碼

    Vue3實(shí)現(xiàn)一個(gè)可左右滑動操作組件的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何利用Vue3實(shí)現(xiàn)一個(gè)可左右滑動操作組件,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Vue有一定幫助,感興趣的可以學(xué)一下
    2022-11-11

最新評論

伊通| 溧水县| 北流市| 微博| 怀远县| 河南省| 西充县| 运城市| 通许县| 肥城市| 禄丰县| 讷河市| 额敏县| 谷城县| 通州市| 年辖:市辖区| 龙里县| 合肥市| 万州区| 德令哈市| 长沙市| 大厂| 建始县| 资中县| 苗栗市| 柳林县| 全椒县| 仙桃市| 资源县| 甘肃省| 尉犁县| 静海县| 抚宁县| 西林县| 逊克县| 文成县| 陈巴尔虎旗| 阿拉尔市| 鸡西市| 平谷区| 吉安县|