搜索

查看: 3092|回复: 11

[JavaScript] 通过vue如何设置header

[复制链接]
发表于 2023-5-4 11:45:37 | 显示全部楼层 |阅读模式
Editor 2023-5-4 11:45:37 3092 11 看全部
目录
  • vue设置header
  • 后端交互对vue中contentType,和ajax的contentType区别对待
  • 当服务器端需要设置contentType:“application/json”:
  • 全局设置请求头
  • 1.使得请求头中存在token
  • 如何获取真实的token,
  • 扩展:vue 配置公共头部(header)
    vue设置header
    使用vue-resource与vue-cookie实现页面登录,数据存储与后台的数据交互

    后端交互对vue中contentType,和ajax的contentType区别对待
    this.$http
            .post(netUrl, change, {
              headers: {
                Authorization: "Bearer " + this.$cookies.get("token")
              }
            })
            .then(
              response => {
                console.log(response.data);
                if (response.data != null) {
                }
              },
              response => {
                console.log("error");
              }
            );
    当服务器端需要设置contentType:“application/json”:
    如果采用的是传统的$.ajax方式进行交互时设置contentType:"application/json;charset=UTF-8"也会导致服务器访问不成功必须严格设置为contentType:“application/json”;

    2023022310295050.png

    2023022310295050.png


    当使用vue中的vue-resource方式交互时,即使不设置contentType:"application/json"也可成功交互;

    2023022310295051.png

    2023022310295051.png


    为什么ajax要求那么严格,原因还不是很清楚;
    但是我们可以通过以上方式:每个http请求中加入以下代码,进行设置请求头
    headers: {
        Authorization: "Bearer " + this.$cookies.get("token")
      }
    全局设置请求头
    虽然上述方式可以成功的设置请求头,但是每个请求都设置显得繁琐,而从网上查找解决方案始终没有成功解决
    解决问题的主要思路:

    1.使得请求头中存在token

    2023022310295052.png

    2023022310295052.png


    网上提供方式:
    Vue.http.interceptors.push((request, next) => {
          // ...
          // 请求发送前的处理逻辑
         request.beforeSend = function() {
                 request.headers['token'] = “token”;
         }
      next((response) => {
          // ...
          // 请求发送后的处理逻辑
          // ...
          // 根据请求的状态,response参数会返回给successCallback或errorCallback
          return response
      })
    测试后发现用以上拦截器的方式不可行,查到网上有说可以尝试
    request.headers.set('token', "Bearer ")
    方式,但是测试后发现仍行不通,通过各种尝试最后发现是去除request.beforeSend直接设置皆可以
    Vue.http.interceptors.push((request, next) => {
      // 请求发送前的处理逻辑
      request.headers.set('token', "Bearer ")
      next((response) => {
        // 请求发送后的处理逻辑
        // 根据请求的状态,response参数会返回给successCallback或errorCallback
        return response
      })
    })
    如何获取真实的token,
    因为全局设置是在main.js中,而token是在登录后才存储下来的能否获取到真实值
    1.确保你的token确实存在
    2.正常程序中通过this.$cookies.get(“token”)可以获取token的值,因为对vue的认知不够深,不知道在入口文件处如何获取token值,通过多次测试获取解决方案
    import Vue from 'vue'
    import VueCookies from 'vue-cookies'
    Vue.use(VueCookies);
    Vue.http.interceptors.push((request, next) => {
      // 请求发送前的处理逻辑
      request.headers.set('Authorization', "Bearer " + VueCookies.get("token"))
      next((response) => {
        // 请求发送后的处理逻辑
        // 根据请求的状态,response参数会返回给successCallback或errorCallback
        return response
      })
    })
    扩展:vue 配置公共头部(header)
    需求:整个项目;每个项目都有头部 但是内容不一样;这种情况我们可以考虑在app.vue中创建公共头部;
    App.vue

             
                
                   
                            {{headerTitle}}
                      
                 
           

    store.js
        import Vue from 'vue'
        import Vuex from 'vuex'

        Vue.use(Vuex)
        const store = new Vuex.Store({  })
        store.registerModule('$vux', { // 名字自己定义
            state: {//设置属性
                headerTitle:'',
            },
            getters:{ // getters 用来获取sate里面存储的数据

            },
             mutations: {//更改属性的状态//返回来会有两个状态一个是上面的state,还有一个是返回来的状态(形参),返回之后将我们请求回来的数据赋给state
                     getHeaderTitle(state, obj) {
                    state.headerTitle = obj.headerTitle
                },
            }

        export default store
    main.js
    //全局配置
    import Vue from "vue";
    import App from "./App";
    import router from "./router";

      store.commit("getHeaderTitle", { headerTitle: to.meta.title });
    router.js
    import Vue from 'vue'
    import Router from 'vue-router'
    Vue.use(Router)

    export default new Router({
      // mode: "history",
      linkActiveClass: "on",
         routes: [
            {
              path: "/business",
              name: "business",
              component: business,
              meta: {
                title: "粤警监管", // 添加该字段,表示进入这个路由是需要登录的
                keepAlive: true
              }
            },
        ]
    })
    到此这篇关于通过vue如何设置header的文章就介绍到这了,更多相关vue设置header内容请搜索知鸟论坛以前的文章或继续浏览下面的相关文章希望大家以后多多支持知鸟论坛
  • 回复

    使用道具 举报

    发表于 2023-6-28 22:02:53 | 显示全部楼层
    塞翁364 2023-6-28 22:02:53 看全部
    这东西我收了!谢谢楼主!知鸟论坛真好!
    回复

    使用道具 举报

    发表于 2023-6-29 19:04:21 | 显示全部楼层
    术数古籍专卖疤 2023-6-29 19:04:21 看全部
    感谢楼主的无私分享!要想知鸟论坛好 就靠你我他
    回复

    使用道具 举报

    发表于 2023-6-30 01:09:53 | 显示全部楼层
    无人岛屿颈 2023-6-30 01:09:53 看全部
    楼主发贴辛苦了,谢谢楼主分享!我觉得知鸟论坛是注册对了!
    回复

    使用道具 举报

    发表于 2023-6-30 09:37:56 | 显示全部楼层
    贰十岁装成熟装s 2023-6-30 09:37:56 看全部
    这东西我收了!谢谢楼主!知鸟论坛真好!
    回复

    使用道具 举报

    发表于 2023-6-30 14:42:52 | 显示全部楼层
    米老鼠和蓝精鼠v 2023-6-30 14:42:52 看全部
    我看不错噢 谢谢楼主!知鸟论坛越来越好!
    回复

    使用道具 举报

    发表于 2023-6-30 17:54:01 | 显示全部楼层
    123456865 2023-6-30 17:54:01 看全部
    其实我一直觉得楼主的品味不错!呵呵!知鸟论坛太棒了!
    回复

    使用道具 举报

    发表于 2023-7-4 03:22:27 | 显示全部楼层
    123456868 2023-7-4 03:22:27 看全部
    论坛不能没有像楼主这样的人才啊!我会一直支持知鸟论坛
    回复

    使用道具 举报

    发表于 2023-7-4 19:06:55 | 显示全部楼层
    123456809 2023-7-4 19:06:55 看全部
    这东西我收了!谢谢楼主!知鸟论坛真好!
    回复

    使用道具 举报

    发表于 2023-7-5 05:26:01 | 显示全部楼层
    啤酒瓶空了缓 2023-7-5 05:26:01 看全部
    楼主,我太崇拜你了!我想我是一天也不能离开知鸟论坛
    回复

    使用道具 举报

    • 您可能感兴趣
    点击右侧快捷回复 【请勿灌水】
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则 返回列表

    RSS订阅| SiteMap| 小黑屋| 知鸟论坛
    联系邮箱E-mail:zniao@foxmail.com
    快速回复 返回顶部 返回列表