問題:
今天被同事遇到的一個問題卡住了:有一個封裝好的網絡請求對象,他的請求頭裏從緩存中獲取token ,代碼如下:
let axiosWrap = axios.create({
// baseURL: 'http://192.168.1.137:8090/haidong-emcee/',
headers: {
'token': localStorage.getItem('token'),
"Content-Type": "application/json;charset=UTF-8"
},
})
用戶授權登錄後將取到的token放入緩存,但是再次用這個網絡對象發起請求時卻並沒有攜帶token !
分析
import export 這種語法,是在代碼編譯階段執行的,所以當這個網絡請求對象被編譯的時候token就會被賦值,而此時token值未空,就會導致上述問題。
總結
(1)import export是在編譯的時候執行的,並且import的對象被修改,會導致源文件被修改。所以上述問題可以這樣解決:授權登錄後修改下import進來的網絡請求對象的header!
(2)require module.exports是在代碼執行階段執行,它拷貝了一份源文件,所以修改require進來的內容並不會造成源文件的更改!