当前位置: 代码网 > it编程>编程语言>Javascript > Vue3请求拦截器里如何配置token

Vue3请求拦截器里如何配置token

2024年09月08日 Javascript 我要评论
vue3请求拦截器配置token// axios请求拦截器httpinstance.interceptors.request.use(config => { console.log('请求拦

vue3请求拦截器配置token

// axios请求拦截器
httpinstance.interceptors.request.use(config => {
   console.log('请求拦截器',config);
   const userstore = useuserstore()
   const token = userstore.userinfo.token
   if(token){
   //固定写法
    config.headers.authorization = `bearer ${token}` 
    //注意bearer后面的空格
   }
  return config
}, e => promise.reject(e))

vue3的axios请求封装,请求拦截,相应拦截

对于三者放在service.js中封装,方便使用

axios.create 的作用是创建一个新的 axios 实例,该实例可以具有自定义配置。

通过使用 axios.create,您可以为任何 api 生成一个客户端,并在使用同一客户端的任何调用中重复使用相同的配置。

这使得在应用程序中使用多个 api 时更加方便,因为您可以为每个 api 创建一个单独的实例,并在每个实例中设置不同的配置。

axios.create 方法接受一个配置对象作为参数,该对象包含以下属性:

  • baseurl:用于所有请求的基本 url。
  • headers:要发送的自定义 headers。
  • timeout:指定请求超时之前的毫秒数。
  • withcredentials:指示是否应该使用跨站点访问控制(cors)凭据。
  • xsrfcookiename:用作 xsrf 令牌值的cookie的名称。
  • xsrfheadername:包含 xsrf 令牌值的 http 头的名称。

例如,以下代码创建了一个新的 axios 实例,并将其配置为使用 /api/ 作为基本 url:

const instance = axios.create({
  baseurl: '/api/'
});

axios请求封装

// 用create创建axios实例
const service = axios.create({
    timeout: 3000,
    baseurl: 'http://127.0.0.1:8888/api/private/v1/',
    headers: { 'content-type': 'application/json;charset=utf-8' }

})

// get 数据请求封装
export const get = config => {
    return service({
        ...config,
        method: 'get',
        data: config.data,
    })

}

// post 数据请求封装
export const post = config => {
    return service({
        ...config,
        method: 'post',
        data: config.data,
    })

}

请求拦截和响应拦截

在 vue3 中,可以使用 axios 库来进行 http 请求。axios 库提供了请求拦截器和响应拦截器,以便在请求发送和响应返回时执行一些操作。

请求拦截器可以用于在请求发送前执行一些操作,例如添加 token、设置请求头等。响应拦截器可以用于在响应返回后执行一些操作,例如处理错误信息、剥离无效数据等。

let loadingobj = null;
// 请求拦截,增加loading,对请求统一处理
service.interceptors.request.use((config) => {
    loadingobj = elloading.service({
        lock: true,
        text: 'loading',
        background: 'rgba(0, 0, 0, 0.7)',
    })
    return config;
})


// 相应拦截,对返回值做同意处理
service.interceptors.response.use(response => {
    loadingobj.close();
    const data = response.data;
    if (!data.data) {
        elmessage.error(data.meta.msg || '服务器错误')
    }
    else {
        elmessage({
            message: '登录成功',
            type: 'success',
            duration: 1500
        })
    }
    return response.data;
}, error => {
    loadingobj.close();
    elmessage({
        message: '服务器错误',
        type: 'error',
        duration: 2000
    })
})

接口的请求

import { get, post } from './service'

// 登录数据请求
export const loginapi = data => {
    return post({
        url: '/login',
        data
    })

}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com