egg 設定跨域白名單

temool007發表於2018-12-07
本人純前端,剛入坑egg一個月,nodejs 小白,得益於 egg 的優雅與強大,公司專案進展得十分順利。我個人egg 的使用體驗跟 vue 一樣(詞窮),單純而美好。

跨域問題

寫服務端難免要考慮到跨域的問題,egg-cors 外掛提供了 origin 的配置,給大家提供了便利。

egg-cors 開啟:

egg 設定跨域白名單

egg-cors 配置:

egg 設定跨域白名單

這是目前用的比較多的外掛,用來解決跨域問題。

但是我在實際專案中,有的需求並不能滿足,所以我覺得egg-cors 在配置上有一定的侷限性。

  1. orgin 引數只能設定一個域名,或者 ' * ',如果想要維護一個白名單,恐怕不支援;
  2. 設定成 ' * ' 允許所有域名跨域時,如果請求帶 withCredentials: true 引數,還是有跨域問題。

為了解決以上問題,決定自己動手擼一個外掛 egg-origin。這是一箇中介軟體,程式碼非常簡單。

egg 設定跨域白名單

沒錯,以上就是全部要程式碼了??

原理:每個請求過來的時候,拿到它的 origin,如果是在配置的白名單內,就手動設定 this.ctx.response.set('Access-Control-Allow-Origin', origin); 這樣就可以根據自己需求來配置跨域白名單。

使用方法:

使用上跟 egg-cors 一樣

egg-origin 開啟:

egg 設定跨域白名單

egg-origin 配置:

egg 設定跨域白名單

這裡 whiteList 引數可以設定域名,也可以直接設定成 [' * '],一定要是陣列,也是為了保持跟 egg-cors 的相同的配置習慣。


這個外掛其實是依賴於 egg-cors 的,我在預設配置中新增了 egg-cors 的配置

egg 設定跨域白名單

egg-origin 設定的白名單,會覆蓋 egg-cors 的配置。站在巨人的肩膀上,才能看的更遠,感謝巨人。

後期迭代計劃

目前還只是支援完全匹配的模式,後面的迭代計劃包括配置 一級域名,所有的子域名都可以,還會加上 【黑名單】 配置,來過濾某些域名。

如果你覺得有用,請隨手給個小星星吧?? github.com/temool/egg-…


相關文章