記一次eggjs+axios傳輸multipart的糾錯過程

總所周知,egg的csrf策略讓post每次都要發送token碼驗證,爲了方便,我在axios的interceptor裏做了前置攔截。ios

結果不幸今後發生!
最開始沒有看官方文檔,覺得csrf應該加在data裏面,又沒有考慮到要上傳multipart/form格式的文檔,因此直接 config.data = Assign({...data},{_csrf})
結果發送的type是application/type。這很正常,閱讀源碼知data爲Obj時會自動添加application的頭。json

因而強行設置multipart/part的header,致使後端出現boundary not found
boundary做爲請求的一部分,應由瀏覽器查看並正確設置,這點有後端經驗的都很清楚,強行加boundary確定沒用。不加又以application上傳了。axios

沒辦法,只有覆寫transferRequest,而後更改config.data爲config.data.append(_csrf,xxx),至此瀏覽器成功正確設置multipart頭後端

PS:主動設置multipart頭徹底無效,axios源碼裏探測到multipart頭就會刪除它,網上不懂的人不要亂說行不行,中國論壇就是這種垃圾風氣,沒試過沒看過就開始傳播。。。。。。
PS2:沒搞懂egg 安全策略默認禁止options請求,我怎麼跨域呢????????????????????又回到上古世紀的jsonp或者只能proxy了???????跨域

相關文章
相關標籤/搜索