本人純前端,剛?cè)肟觘gg一個月,nodejs 小白,得益于 egg 的優(yōu)雅與強(qiáng)大,公司項目進(jìn)展得十分順利。我個人egg 的使用體驗跟 vue 一樣(詞窮),單純而美好。
跨域問題
寫服務(wù)端難免要考慮到跨域的問題,egg-cors 插件提供了 origin 的配置,給大家提供了便利。
egg-cors 開啟:

egg-cors 配置:

這是目前用的比較多的插件,用來解決跨域問題。
但是我在實際項目中,有的需求并不能滿足,所以我覺得egg-cors 在配置上有一定的局限性。
orgin 參數(shù)只能設(shè)置一個域名,或者 ' * ',如果想要維護(hù)一個白名單,恐怕不支持;
設(shè)置成 ' * ' 允許所有域名跨域時,如果請求帶 withCredentials: true 參數(shù),還是有跨域問題。
為了解決以上問題,決定自己動手?jǐn)]一個插件 egg-origin。這是一個中間件,代碼非常簡單。
沒錯,以上就是全部要代碼了????

原理:每個請求過來的時候,拿到它的 origin,如果是在配置的白名單內(nèi),就手動設(shè)置 this.ctx.response.set('Access-Control-Allow-Origin', origin); 這樣就可以根據(jù)自己需求來配置跨域白名單。
使用方法:
使用上跟 egg-cors 一樣
egg-origin 開啟:

egg-origin 配置:

這里 whiteList 參數(shù)可以設(shè)置域名,也可以直接設(shè)置成 [' * '],一定要是數(shù)組,也是為了保持跟 egg-cors 的相同的配置習(xí)慣。
這個插件其實是依賴于 egg-cors 的,我在默認(rèn)配置中添加了 egg-cors 的配置

egg-origin 設(shè)置的白名單,會覆蓋 egg-cors 的配置。站在巨人的肩膀上,才能看的更遠(yuǎn),感謝巨人。
后期迭代計劃
目前還只是支持完全匹配的模式,后面的迭代計劃包括配置 一級域名,所有的子域名都可以,還會加上 【黑名單】 配置,來過濾某些域名。
如果你覺得有用,請隨手給個小星星吧?????GitHub地址