国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Jadual Kandungan
vue3+ts+axios+pinia mencapai penyegaran yang tidak masuk akal
vue3 muat semula tanpa rasa sakit (refresh tidak masuk akal)
Proses pelaksanaan
Rumah hujung hadapan web View.js Cara menggunakan vue3+ts+axios+pinia untuk mencapai penyegaran yang tidak masuk akal

Cara menggunakan vue3+ts+axios+pinia untuk mencapai penyegaran yang tidak masuk akal

May 25, 2023 pm 03:37 PM
vue3 axios pinia

vue3+ts+axios+pinia mencapai penyegaran yang tidak masuk akal

1 Muat turun pertama aiXos dan pinia dalam projek

npm i pinia --save
npm install axios --save

2 Merangkumkan permintaan axios-----

Muat turun js-cookie

npm i JS-cookie -s
//引入aixos
import type { AxiosRequestConfig, AxiosResponse } from "axios";
import axios from 'axios';
import { ElMessage } from 'element-plus';
import { useUserInfoStore } from '@/stores/modules/UserInfo'
import router from '@/router';
import qs from 'qs';
import Cookie from "js-cookie";
let baseURL = "";
// console.log(process.env.NODE_ENV);//判斷環(huán)境
if (process.env.NODE_ENV === 'development') {
    baseURL = '/m.api'//后臺(tái)請(qǐng)求接口地址
} else {
    baseURL = 'http://xxxx.cn:8080';//這里是項(xiàng)目上線后的地址
   
}
declare interface TypeResponse extends AxiosResponse {
    /**
     * 錯(cuò)誤號(hào),200表示成功,10006令牌過期
     */
    errno: number,
    /**
     * 返回的信息
     */
    errmsg: string
}
 
//創(chuàng)建axios實(shí)例
 
const instance = axios.create({
    baseURL,  // 接口地址
    timeout: 3000,
    headers: {
        "Content-Type": 'application/x-www-form-urlencoded'
    }
 
});
 
 
//添加攔截器
instance.interceptors.request.use((config) => {
    // 在發(fā)送請(qǐng)求之前做些什么--給請(qǐng)求頭添加令牌token
    (config as any).headers['AdminToken'] = Cookie.get('token')//從cookie中拿token值,
//這里是使用了js-cookie插件。
    // console.log(config, "請(qǐng)求攔截器")
    return config
}, reeor => {
    // 對(duì)請(qǐng)求錯(cuò)誤做些什么
    return Promise.reject(reeor);
});
// 需要無痛刷新的操作頁面
const METHOD_TYPE = ["_mt=edit", "_mt=create", "_mt=delete"]
// //響應(yīng)攔截器
instance.interceptors.response.use(async (response: AxiosResponse) => {
    // 對(duì)響應(yīng)數(shù)據(jù)做點(diǎn)什么
    let data = response.data;
    let { errno, errmsg } = data;
    console.log(response, "響應(yīng)攔截器");
    let path = router.currentRoute.value.fullPath;//當(dāng)前路由路徑
    if (10006 === errno) {
        const configData = response.config.data || ''
        // 判斷請(qǐng)求類型是否需要無痛刷新,index !== -1則需要無痛刷新
        let index = METHOD_TYPE.findIndex(item => configData.includes(item))
        if (-1 === index) {//需要重新登入獲取令牌
            router.replace({ path: "/login", query: { back: path } })//登入后需要跳回的地址
            return
        } else {//需要無痛刷新令牌
            const store = useUserInfoStore();
            const { username, password } = store.LoginInfo//在狀態(tài)管理里面定義一個(gè)loginInfo
            // 1.重新獲取令牌
            let loginData = { _gp: 'admin', _mt: 'login', username, password };
            const { errno, errmsg, data } = await post(loginData)//這里是通過async 將異步序列化改為同步
            if (200 == errno) {
                Cookie.set('token', data)//保存令牌
            } else {
                router.replace({ path: "/login", query: { back: path } })//登入后需要跳回的地址
                return Promise.reject({ errno, errmsg, data })
            }
            return instance.request(response.config)
        }
    // ElMessage.error(errmsg);//錯(cuò)誤信息
    }
    return data;
}, reeor => {
    console.log(reeor);
 
    return Promise.reject(reeor);
})
 
function get(params?: object): Promise<TypeResponse> {
    return instance.get(&#39;&#39;, { params });
};
function post(data: object, params?: object): Promise<TypeResponse> {
    return instance.post(&#39;&#39;, qs.stringify(data), { params });
};
 
 
//暴露實(shí)列
export {
    post, get,
}

3.qs.stringify(data) menukar data yang diminta kepada format borang Jika tidak diperlukan, alih keluar terus

4 - Laluan lompatan perlu ditetapkan selepas log masuk. Jika tidak diperlukan, anda boleh mengalih keluar

5. Pengurusan negeri--data

Muat turun alat kegigihan

npm install pinia-plugin-persistedstate --s

Konfigurasikan kegigihan dalam main.js

//引入數(shù)據(jù)持久化插件
import piniaPluginPersistedstate from &#39;pinia-plugin-persistedstate&#39;;
const pinia = createPinia()
pinia.use(piniaPluginPersistedstate);
app.use(pinia)
rrree

6 Nama pengguna dan kata laluan

import { defineStore } from &#39;pinia&#39;
export const useUserInfoStore = defineStore(&#39;UserInfo&#39;, {
    state:() => ({
       
        LoginInfo:{
            username:&#39;&#39;,
            password:&#39;&#39;
        }
      }),
     
      persist:true;//狀態(tài)存儲(chǔ)持久化
})

7.main.js Sediakan pengawal penghalaan

npm i lodash --s
import Cookies from &#39;js-cookie&#39;;//引入cookie
import * as _ from &#39;lodash&#39;;//防抖節(jié)流插件
import {post} from &#39;@/util&#39;;
import {useUserInfoStore} from &#39;@/stores/modules/UserInfo&#39; ;//用戶信息
import { useRouter,useRoute } from &#39;vue-router&#39; ;//引入路由
//這里是表單輸入的數(shù)據(jù)
const ruleForm = reactive({
    password: &#39;123456&#39;,
    username: &#39;admin&#39;
});
//請(qǐng)求接口數(shù)據(jù)
let data = {
    _gp: "admin",
    _mt: &#39;login&#39;,
    ...ruleForm
};
 
let LoginInfo = useUserInfoStore().LoginInfo;//狀態(tài)管理定義的數(shù)據(jù)
async function init() {
    await post(data).then((res:any) => {
        let { data: token, errno, errmsg } = res
        if (200 === errno) {
            let time = new Date() //設(shè)置過期時(shí)間
            time.setTime(time.getTime() + 1000 * 60 * 30)
            Cookies.set(&#39;token&#39;, token, { expires: time });
            Object.assign(LoginInfo,ruleForm)
            if (route.query.back) { //如果存在參數(shù)
             let paths = route.query.back+&#39;&#39;//拼接字符串
             console.log(paths);
             if (paths==&#39;/&#39;) {
//因?yàn)槲业膆ome是&#39;/&#39;,所有需要判斷
                router.replace(&#39;/Surface&#39;)//跳轉(zhuǎn)至主頁
                return
             }else{
                router.replace(paths)//則跳轉(zhuǎn)至進(jìn)入登錄頁前的路由
             }
             
           } else {
            router.replace(&#39;/Surface&#39;)//否則跳轉(zhuǎn)至首頁
           }
            
        } else {
            ElMessage.error(errmsg)
        }
    }).catch((err:any) => {
        ElMessage.error(&#39;登錄異常!&#39;)
    })
    let info = {//用戶信息請(qǐng)求信息接口數(shù)據(jù)
        _gp: "admin",
        _mt: &#39;info&#39;,
    }
//下面這個(gè)函數(shù)是請(qǐng)求用戶信息的,不需要可以不寫
    await post(info).then((res:any) => {
        let {data} = res
        console.log(data);
        infos(data)
 
    }).catch((err:any)=>{
        ElMessage.error(&#39;登錄異常!&#39;)
    })
}
//防抖節(jié)流
const fangdou = _.debounce(init, 1500, {
    leading: true,  // 延長開始后調(diào)用
    trailing: false  // 延長結(jié)束前調(diào)用
})
//移除組件時(shí),取消防抖
onUnmounted(() => {
    fangdou.cancel()
})

Itu sahaja

vue3 muat semula tanpa rasa sakit (refresh tidak masuk akal)

prinsip penyegaran tanpa rasa sakit: apabila token tamat tempoh, pemintas respons membuat semula permintaan log masuk melalui pertimbangan

Proses pelaksanaan

Tentukan objek loginInfo dalam keadaan pengurusan negeri untuk menyimpan akaun pengguna dan kata laluan

import Cookie from &#39;js-cookie&#39;
import router from &#39;./router&#39;//引入路由
 
//路由守衛(wèi)
router.beforeEach(async (to, from ) => {
    let tokent:string|undefined = Cookie.get(&#39;token&#39;)
    if (!tokent && to.path == &#39;/login&#39;) {
        return  true
    }
    // 沒有登錄,強(qiáng)制跳轉(zhuǎn)登錄頁
    if (!tokent && to.path !== &#39;/login&#39;) {
        router.replace({path:&#39;/login&#39;,query:{back:to.path}});
    }
    // 防止重復(fù)登錄
    if (tokent && to.path === &#39;/login&#39;) {
        return {
            path: from.path ? from.path : &#39;/Surface&#39;
        }
    }
    return true
})

Dalam halaman log masuk, selepas permintaan log masuk berjaya, akaun dan kata laluan pengguna disimpan dalam pengurusan status

//在狀態(tài)管理文件中
import { defineStore } from &#39;pinia&#39;
import Cookies from "js.cookie"
import {post} from &#39;@/http&#39;
 
import router from &#39;@/router&#39;;
import { ElMessage } from &#39;element-plus&#39;;
export const useUserStore = defineStore({
  id: "userStore",
  persist: {
    paths:[&#39;user&#39;]
  },//持久化
  state: () => ({
    loginInfo:{
      username:&#39;&#39;, 
      password:&#39;&#39;
    }
  }),
  getters: {},
  actions: {
    setUser(user:UserInfo) {
      this.user = user;
    },
    loginOut(){
      const data ={
        _gp:"admin",
        _mt:"logout"
      }
      post({},data).then((res:any)=>{
        let {errmsg,errno} = res
        if(200==errno){
          localStorage.removeItem("userStore")
          Cookies.remove("token")
          router.replace(&#39;/login&#39;)
          ElMessage.success(errmsg);
        }else{
          ElMessage.error(errmsg);
        }
      }).catch(res=>{
      console.log(res,"退出登入失敗");
      })
    }
  }
})

3 Dalam http, tentukan pembolehubah tatasusunan dahulu stores Operasi yang memerlukan muat semula tanpa rasa sakit termasuk: padam, tambah, edit

4 Dalam pemintas respons, tentukan sama ada 10006 sama dengan errno, token telah tamat tempoh, jika tidak, ia belum tamat tempoh

5. Apabila token tamat tempoh, dapatkan data permintaan antara muka dan cari dalam tatasusunan yang ditentukan untuk menentukan sama ada jenis permintaan perlu dimuat semula tanpa rasa sakit

6. index===-1 bermakna ia adalah tidak ditemui dalam tatasusunan, jadi tidak perlu memuat semulanya Muat semula dan melompat terus ke halaman log masuk untuk log masuk

7.index! ==-1 menunjukkan bahawa penyegaran yang tidak menyakitkan diperlukan Akaun pengguna dan kata laluan yang disimpan dalam pengurusan status dinyahkonstruk, dan permintaan antara muka log masuk dibuat untuk mendapatkan semula token, dan kemudian permintaan log masuk boleh dibuat tanpa memasukkan halaman log masuk. Kesan penyegaran yang tidak menyakitkan

//在登入頁面文件中
const data = { ...ruleForm, _gp: "admin", _mt: "login" }//轉(zhuǎn)換成字符串
post({}, data).then(res => {
    let { data: token, errmsg, errno } = res as any;//獲取登錄狀態(tài)
    if (200 == errno) {//登錄成功的判斷
        ElMessage.success("登錄成功!")//消息提示登錄成功
        let now = new Date();//獲取當(dāng)前時(shí)間
        now.setTime(now.getTime() + 1000 * 60 * 30);//轉(zhuǎn)成時(shí)間類型
        Cookies.set("token", res.data, { expires: now })//獲取token存到cookie
        Object.assign(store.loginInfo, ruleForm)//將賬號(hào)密碼存儲(chǔ)到狀態(tài)管理
        return Promise.resolve(token)
    } else {
        ElMessage.error(errmsg);//登入失敗
        return Promise.reject(errmsg)
    }
})

Atas ialah kandungan terperinci Cara menggunakan vue3+ts+axios+pinia untuk mencapai penyegaran yang tidak masuk akal. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial PHP
1502
276
Apakah yang perlu saya lakukan jika 'Ralat Tidak Ditangkap (dalam janji): Permintaan gagal dengan kod status 500' berlaku apabila menggunakan axios dalam aplikasi Vue? Apakah yang perlu saya lakukan jika 'Ralat Tidak Ditangkap (dalam janji): Permintaan gagal dengan kod status 500' berlaku apabila menggunakan axios dalam aplikasi Vue? Jun 24, 2023 pm 05:33 PM

Sangat biasa untuk menggunakan axios dalam aplikasi Vue ialah klien HTTP berasaskan Promise yang boleh digunakan dalam penyemak imbas dan Node.js. Semasa proses pembangunan, mesej ralat "Uncaught(inpromise)Error: Requestfailedwithstatuscode500" kadangkala muncul untuk pembangun, mesej ralat ini mungkin sukar difahami dan diselesaikan. Artikel ini akan meneroka perkara ini

Bagaimana untuk menyelesaikan masalah 'Ralat: Ralat Rangkaian' apabila menggunakan axios dalam aplikasi Vue? Bagaimana untuk menyelesaikan masalah 'Ralat: Ralat Rangkaian' apabila menggunakan axios dalam aplikasi Vue? Jun 25, 2023 am 08:27 AM

Bagaimana untuk menyelesaikan masalah "Ralat: NetworkError" apabila menggunakan axios dalam aplikasi Vue? Dalam pembangunan aplikasi Vue, kami sering menggunakan axios untuk membuat permintaan API atau mendapatkan data, tetapi kadangkala kami menghadapi "Ralat: NetworkError" dalam permintaan axios. Apakah yang perlu kami lakukan dalam kes ini? Pertama sekali, anda perlu memahami maksud "Error:NetworkError" Ia biasanya bermaksud sambungan rangkaian

Apakah yang perlu saya lakukan jika 'TypeError: Failed to fetch' berlaku apabila menggunakan axios dalam aplikasi Vue? Apakah yang perlu saya lakukan jika 'TypeError: Failed to fetch' berlaku apabila menggunakan axios dalam aplikasi Vue? Jun 24, 2023 pm 11:03 PM

Baru-baru ini, semasa pembangunan aplikasi Vue, saya menghadapi masalah biasa: "TypeError: Failedtofetch" mesej ralat. Masalah ini berlaku apabila menggunakan axios untuk membuat permintaan HTTP dan pelayan bahagian belakang tidak bertindak balas kepada permintaan dengan betul. Mesej ralat ini biasanya menunjukkan bahawa permintaan tidak boleh sampai ke pelayan, mungkin disebabkan oleh sebab rangkaian atau pelayan tidak bertindak balas. Apakah yang perlu kita lakukan selepas mesej ralat ini muncul? Berikut ialah beberapa penyelesaian: Semak sambungan rangkaian anda disebabkan oleh

Pilihan permintaan data dalam Vue: Axios atau Fetch? Pilihan permintaan data dalam Vue: Axios atau Fetch? Jul 17, 2023 pm 06:30 PM

Pilihan permintaan data dalam Vue: AxiosorFetch? Dalam pembangunan Vue, mengendalikan permintaan data adalah tugas yang sangat biasa. Memilih alat yang hendak digunakan untuk permintaan data adalah persoalan yang perlu dipertimbangkan. Dalam Vue, dua alatan yang paling biasa ialah Axios dan Fetch. Artikel ini akan membandingkan kebaikan dan keburukan kedua-dua alat dan memberikan beberapa kod sampel untuk membantu anda membuat pilihan anda. Axios ialah klien HTTP berasaskan Promise yang berfungsi dalam penyemak imbas dan Node.

Bagaimana untuk memilih avatar dan memangkasnya dalam Vue3 Bagaimana untuk memilih avatar dan memangkasnya dalam Vue3 May 29, 2023 am 10:22 AM

Kesan terakhir ialah memasang komponen VueCropper yarnaddvue-cropper@next Nilai pemasangan di atas adalah untuk Vue3 Jika ia adalah Vue2 atau anda ingin menggunakan kaedah lain untuk merujuk, sila lawati alamat npm rasminya. Ia juga sangat mudah untuk merujuk dan menggunakannya dalam komponen Anda hanya perlu memperkenalkan komponen yang sepadan dan fail gayanya. Saya tidak merujuknya secara global di sini, tetapi hanya memperkenalkan import{userInfoByRequest}from'../js/api. ' dalam fail komponen saya import{VueCropper}dari'vue-cropper&

Gunakan Vue dan Axios dengan cekap untuk melaksanakan pemprosesan kelompok data bahagian hadapan Gunakan Vue dan Axios dengan cekap untuk melaksanakan pemprosesan kelompok data bahagian hadapan Jul 17, 2023 pm 10:43 PM

Gunakan Vue dan Axios dengan cekap untuk melaksanakan pemprosesan kumpulan data bahagian hadapan Dalam pembangunan bahagian hadapan, pemprosesan data adalah tugas biasa. Apabila kita perlu memproses sejumlah besar data, pemprosesan data akan menjadi sangat menyusahkan dan tidak cekap jika tiada kaedah yang berkesan. Vue ialah rangka kerja bahagian hadapan yang sangat baik, dan Axios ialah perpustakaan permintaan rangkaian yang popular. Mereka boleh bekerjasama untuk melaksanakan pemprosesan kumpulan data bahagian hadapan. Artikel ini akan memperkenalkan secara terperinci cara menggunakan Vue dan Axios dengan cekap untuk pemprosesan data kelompok dan memberikan contoh kod yang berkaitan.

Apakah yang perlu saya lakukan jika 'Ralat: tamat masa xxxms melebihi' berlaku apabila menggunakan axios dalam aplikasi Vue? Apakah yang perlu saya lakukan jika 'Ralat: tamat masa xxxms melebihi' berlaku apabila menggunakan axios dalam aplikasi Vue? Jun 24, 2023 pm 03:27 PM

Apakah yang perlu saya lakukan jika "Ralat: timeoutofxxxmsexceeded" berlaku apabila menggunakan axios dalam aplikasi Vue? Dengan perkembangan pesat Internet, teknologi bahagian hadapan sentiasa dikemas kini dan diulang Sebagai rangka kerja bahagian hadapan yang sangat baik, Vue telah dialu-alukan oleh semua orang sejak beberapa tahun kebelakangan ini. Dalam aplikasi Vue, kita selalunya perlu menggunakan axios untuk membuat permintaan rangkaian, tetapi kadangkala ralat "Ralat: timeoutofxxxmsexceeded" berlaku.

Panduan lengkap untuk melaksanakan muat naik fail dalam Vue (axios, element-ui) Panduan lengkap untuk melaksanakan muat naik fail dalam Vue (axios, element-ui) Jun 09, 2023 pm 04:12 PM

Panduan lengkap untuk melaksanakan muat naik fail dalam Vue (axios, element-ui) Dalam aplikasi web moden, muat naik fail telah menjadi fungsi asas. Sama ada memuat naik avatar, gambar, dokumen atau video, kami memerlukan cara yang boleh dipercayai untuk memuat naik fail dari komputer pengguna ke pelayan. Artikel ini akan memberikan anda panduan terperinci tentang cara menggunakan Vue, axios dan element-ui untuk melaksanakan muat naik fail. Apa itu axiosaxios adalah berasaskan prom

See all articles