前端踩坑Vue/Axios/Oauth2.0(施工中...)

最近在前端开发的过程当中踩了很多坑,先记录下来,日后整理html

路由实例更新

vue.js里每一次进行路由导航,对应路由的vue.js组件都会生成一个新的vue实例(简称vm),不注意这一点话会掉坑。前端

好比在/home路由里,在mounted()中,我在window下监听了一个键盘事件,为了不事件重复绑定屡次,我设立一个全局变量来标记建立的状态,只有第一次进入时才建立监听事件。vue

if(!window.keyupFlag){
        let myFunc = ()=>{console.log(this.$refs.input1)}; //这里用箭头函数能直接在函数内拿到指向当前的vm的this
        window.addEventListener('keyup',myFunc);
        window.keyupFlag = 1;
    }

可是这样会致使一个问题,在我跳转到别的路由,好比/about后在跳转回/home,我在myFunc函数中this.$refs.input1就会返回undefined
缘由就是此时/home路由中的vm再也不是第一次建立监听时this指向的vm了。ios

那么转换思路,改为每次进入/home都建立监听事件,且在建立前先清除以前创立的事件。
以及要注意的是,清除事件的target.removeEventListener(type, listener[, options]);,其中传入的参数要和建立时的一致,且type和listener这两个参数都是必须的,具体的能够参阅MDN文档
这里我选择用vuex来保存监听的回调函数vuex

let myFunc = ()=>{console.log(this.$refs.input1)}; 
    
    let oldMyFunc = this.$store.state.myFunc; //第一次进入/home时这里尚未被myFunc赋值,第二次进入路由时就有正确的值了
    window.removeEventListener('keyup',oldMyFunc);
    
    window.addEventListener('keyup',myFunc);
    this.$store.commit('setMyFunc',myFunc);

使用Axios发起POST请求时,产生OPTIONS请求问题

缘由是跨域发起复杂请求时,按照新的标准浏览器会先发起一个预检请求OPTIONS请求来测试请求是否能被服务器接受,若是服务端对此没有相应的处理,就会出现请求失败的问题。
具体的方案待施工,先丢几个参考segmentfault

http://www.ruanyifeng.com/blo...
https://juejin.im/post/5c68b2...
https://segmentfault.com/a/11...跨域

Oauth2.0受权请求

相关的教程不少,可是有两点鲜有说起浏览器

  1. 受权服务端要设置请求中的回调域名或ip地址
  2. 当使用code来请求access_token时,发起的请求头Header中要设置"Authorization": ...,
    具体的Authorization值可能不一样的服务端会有区别,个人项目中用的是服务器

    //BASE64编码字符串"clientId:clientSecret"
    'Basic ' + window.btoa(clientId + ':' + clientSecret);
相关文章
相关标签/搜索