欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

nuxt實(shí)現(xiàn)封裝axios并且獲取token

 更新時(shí)間:2023年10月12日 08:39:16   作者:這個(gè)殺手好冷  
這篇文章主要介紹了nuxt實(shí)現(xiàn)封裝axios并且獲取token,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

nuxt封裝axios并且獲取token

axios 多環(huán)節(jié)變量配置不同地址

npm安裝方式

npm i --D cross-env

  "scripts": {
    "dev": "cross-env process.env.__ENV=測(cè)試地址 nuxt",
    "build": "cross-env process.env.__ENV=打包地址 nuxt build",
    "start": "nuxt start",
    "export": "nuxt export",
    "serve": "nuxt serve"
  },

nuxt.config.js配置

env: {
  __ENV: process.env.__ENV
},

axios全局使用的時(shí)候

axios.defaults.baseURL?=?process.env.__ENV

nuxt 服務(wù)端進(jìn)行請(qǐng)求時(shí)帶上token

期望結(jié)果:在服務(wù)端、客戶端請(qǐng)求時(shí)候帶上token

實(shí)現(xiàn)方式:把請(qǐng)求的cookie放到header里

如果沒有 安裝 cookie-universal-nuxt 需要安裝一下插件

//修改 nuxt.config.js
//添加模塊
  modules: [
    'cookie-universal-nuxt',
    "@nuxtjs/axios",
  ]
//添加插件引用
  plugins:[
    '@/plugins/axios',
  ]
//添加插件文件 plugins/axios.js
let isClient = process.env.VUE_ENV === 'client' //區(qū)分端
export default ({ redirect, $axios, app }) => {
  $axios.onRequest(config => {
    return new Promise((resolve, reject) => {
      //match api
      let token = app.$cookies.get('token')
      //add token
      if (token) config.headers.Authorization = token;
      //其他的請(qǐng)求前業(yè)務(wù)邏輯 比如:api map
      resolve(config);
    })
  });
  $axios.onResponse(res => {
    return new Promise((resolve, reject) => {
      //返回?cái)?shù)據(jù)邏輯處理 比如:error_code錯(cuò)誤處理
      resolve(res.data);
    })
  });
  $axios.onError(config => {
    console.log('Making request to ' + config.url)
  })
};

nuxt——nuxt.axios的使用

bug:localStorage不存在

在SSR中,created生命周期在服務(wù)端執(zhí)行,node環(huán)境中沒有l(wèi)ocalStorage所以會(huì)報(bào)錯(cuò),

將需要使用localStorage的代碼放到瀏覽器使用的生命周期(mounted)中。

配置文件配置axios文件不在服務(wù)端渲染 { src: ‘@/plugins/axios’, ssr: false }

axios封裝 plugins/axios.js

import { Message, Notification } from 'element-ui'
import Cookie from 'js-cookie'
export default function (app) {
  const axios = app.$axios
  // 基本配置
  axios.defaults.timeout = 10000
  axios.defaults.headers.post['Content-Type'] = 'application/json'
  axios.defaults.headers.patch['Content-Type'] = 'application/json'
  axios.defaults.headers.put['Content-Type'] = 'application/json'
  // 請(qǐng)求回調(diào)(若token從localStorage獲取,接口只能在mounted之后調(diào)用)
  axios.onRequest((config) => {
    const token = Cookie.get('token')
    config.headers.Authorization = token 
  })
  // 返回回調(diào)
  axios.onResponse((response) => {
    console.log(8888,response.data)
    if (response.data.code === 200) {
      return Promise.resolve(response.data)
    } else if (response.data.code === 401) {
      Message.error('請(qǐng)登錄后再操作');
    } else {
      Message.error(response.data.msg);
      return Promise.reject(response.data)
    }
  })
  // 錯(cuò)誤回調(diào)
  axios.onError((error) => {
    switch (error.response.status) {
      case 401:
        location.href = '/login'
        break
    }
  })
}
// 	nuxt.config.js
plugins: [
    '@/plugins/element-ui',
    '@/plugins/axios',
    //{ src: '@/plugins/axios', ssr: false } 關(guān)閉服務(wù)端渲染
  ],
//找到modules模塊,把proxy添加到里面
 modules: [
    '@nuxtjs/axios',
    '@nuxtjs/proxy'
  ],
 axios: {
    proxy: true // Can be also an object with default options
  },
  proxy: {
      '/api': {
      changeOrigin: true,
      target: 'http://127.0.0.1:8082', // 允許跨域的服務(wù)器地址
      pathRewrite: {
        '^/api': ''
      }
     }
 }

調(diào)用接口

  async asyncData ({ params, $axios }) {
    const { data } = await $axios.get(`/articles/index?pageIndex=1`)
    return { data, page: 1 }
  }
  this.$axios.post('url', {})
  this.$axios.get('url', { params:{} })
  async asyncData ({ params, $axios }) {
    const [articles, category] = await Promise.all([
      $axios.$get(`/articles/category/${params.id}`),
      $axios.$get(`/categories/${params.id}`)
    ])
  }

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Vue添加請(qǐng)求攔截器及vue-resource 攔截器使用

    Vue添加請(qǐng)求攔截器及vue-resource 攔截器使用

    這篇文章主要介紹了Vue添加請(qǐng)求攔截器及vue-resource 攔截器使用,需要的朋友可以參考下
    2017-11-11
  • vue3.0中setup使用(兩種用法)

    vue3.0中setup使用(兩種用法)

    這篇文章主要介紹了vue3.0中setup使用,本文通過兩種用法給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • vue使用video.js實(shí)現(xiàn)播放m3u8格式的視頻

    vue使用video.js實(shí)現(xiàn)播放m3u8格式的視頻

    這篇文章主要為大家詳細(xì)介紹了vue如何使用video.js實(shí)現(xiàn)播放m3u8格式的視頻,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-12-12
  • Vue 菜單欄點(diǎn)擊切換單個(gè)class(高亮)的方法

    Vue 菜單欄點(diǎn)擊切換單個(gè)class(高亮)的方法

    今天小編就為大家分享一篇Vue 菜單欄點(diǎn)擊切換單個(gè)class(高亮)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • 詳解如何使用vue實(shí)現(xiàn)頁面訪問攔截

    詳解如何使用vue實(shí)現(xiàn)頁面訪問攔截

    這篇文章主要為大家詳細(xì)介紹了如何使用vue實(shí)現(xiàn)頁面訪問攔截功能,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,需要的可以了解一下
    2023-08-08
  • 簡(jiǎn)單理解vue中Props屬性

    簡(jiǎn)單理解vue中Props屬性

    這篇文章主要幫助大家簡(jiǎn)單的理解vue中Props屬性,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • 詳解VUE響應(yīng)式原理

    詳解VUE響應(yīng)式原理

    這篇文章主要為大家介紹了vue組件通信的幾種方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-11-11
  • 基于Ant-design-vue的Modal彈窗 封裝 命令式與Hooks用法

    基于Ant-design-vue的Modal彈窗 封裝 命令式與Hooks用法

    這篇文章主要給大家介紹了基于Ant-design-vue的Modal彈窗封裝命令式與Hooks用法,文中有詳細(xì)的代碼示例,具有一定的參考價(jià)值,感興趣的同學(xué)可以借鑒閱讀
    2023-06-06
  • elementPlus表格二次封裝過程

    elementPlus表格二次封裝過程

    我們正常在開發(fā)項(xiàng)目中,表格的風(fēng)格是一致的,但是表格或多或少會(huì)有些不同,有些是需要分頁,有些是按鈕功能不同,有些又需要加Tag,或者對(duì)時(shí)間進(jìn)行格式化等,這篇文章主要介紹了elementPlus表格二次封裝過程,需要的朋友可以參考下
    2024-07-07
  • Vue高效更新UI的方法詳解

    Vue高效更新UI的方法詳解

    在現(xiàn)代前端開發(fā)中,Vue.js以其高效的響應(yīng)式數(shù)據(jù)綁定和視圖更新機(jī)制著稱,而這一切的核心技術(shù)之一就是虛擬DOM和Diff算法,本文將詳細(xì)介紹虛擬DOM的概念、Diff算法的工作原理,以及Vue如何利用這些技術(shù)高效地更新UI,需要的朋友可以參考下
    2025-02-02

最新評(píng)論