妹的,作为不是运维人员的我,真是苦逼了一把,baidu,google找遍,硬是找不到一篇好用的文章,难道没人遇到过吗?
是这样,玩react-native,做fetch数据的时候,远程死活拿不到数据,用jq我当然知道这是跨域的操作,but, native为什么也会跨域,上网搜了一遍,了解到大意是,rn的逻辑/数据部分使用javascript来处理,直到view的时候才会启用native来渲染,是牛逼的想法,这样说来,rn的异步数据处理存在跨域就理所当然了,不知道我理解的对不对。但现实的情况就是如此,本地数据可以,远程数据提示网络出错,debug在promise这里。
说道这里,rn启用fetch方法来获取异步数据,fetch是ES6
新标,是要干死jq吗?好吧!怪jq2的ajax不争气,jq3难道会这样没落。。。。,关于jq我是有小情怀的。。。
KOAJS支持
FKPJS的node部分是KOAJS框架,KOAJS官方有一个处理Access-Control-Allow-origin
的包kcros
,传送门,原来是fengmk2
大人的作品,膜拜一下fengmk2,安装好KOAJS就可以直接支持CROS
了。
Nginx支持
说到底,node是挂载在nginx后端的,nginx本身支持Access-Control-Allow-origin
,所以我们来配置nginx。
常规配置如下
location / ......
.....
add_header 'Access-Control-Allow-origin' 'http://www.xxxx.com';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET, POST OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
....
但node部分是nginx反向代理访问,如上设置,并没有卵用,反向代理使用nginx的proxy,起作用的配置如下:
....
proxy_set_header 'Access-Control-Allow-origin' 'http://www.xxxx.com';
proxy_set_header 'Access-Control-Allow-Methods' 'GET, POST';
...
好了,在chrome上jq和fetch,都能正常跑通,再试rn吧