egg 設置跨域白名單

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

跨域問題

寫服務端不免要考慮到跨域的問題,egg-cors 插件提供了 origin 的配置,給你們提供了便利。

egg-cors 開啓:前端


egg-cors 配置:vue


這是目前用的比較多的插件,用來解決跨域問題。node

可是我在實際項目中,有的需求並不能知足,因此我以爲egg-cors 在配置上有必定的侷限性。git

  1. orgin 參數只能設置一個域名,或者 ' * ',若是想要維護一個白名單,恐怕不支持;
  2. 設置成 ' * ' 容許全部域名跨域時,若是請求帶 withCredentials: true 參數,仍是有跨域問題。

爲了解決以上問題,決定本身動手擼一個插件 egg-origin。這是一箇中間件,代碼很是簡單。github


沒錯,以上就是所有要代碼了😅😅跨域

原理:每一個請求過來的時候,拿到它的 origin,若是是在配置的白名單內,就手動設置 this.ctx.response.set('Access-Control-Allow-Origin', origin); 這樣就能夠根據本身需求來配置跨域白名單。數組

使用方法:

使用上跟 egg-cors 同樣cors

egg-origin 開啓:this


egg-origin 配置:插件


這裏 whiteList 參數能夠設置域名,也能夠直接設置成 [' * '],必定要是數組,也是爲了保持跟 egg-cors 的相同的配置習慣。


這個插件實際上是依賴於 egg-cors 的,我在默認配置中添加了 egg-cors 的配置


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

後期迭代計劃

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

若是你以爲有用,請隨手給個小星星吧👍👍  github.com/temool/egg-…
相關文章
相關標籤/搜索