为什么客户端 HTTP.get() 调用在 Cordova (Meteor 0.9.3) 中不起作用?



更新问题:简单的客户端HTTP.get()调用在iOS模拟器上不起作用。同样的调用正在获取数据,并在浏览器中的模板中完美显示(localhost:3000)早些时候,我认为这与本地集合有关,但问题实际上是HTTP.get调用,它没有在cordova(ios模拟器或设备)中返回任何数据。

请注意,我的整个代码只在客户端if(Meteor.isClient){}上,而在if(Meteor.isCordova){}中没有。

原始问题:有可能在科多瓦定义一个当地收藏吗(Meteor 0.9.3)?我的应用程序中有一个本地(仅限客户端)集合,如图所示:Items=新Meteor.Collection(空);

此本地集合临时从外部API获取数据(通过添加"meteol add http"并使用http.get()),并将此内容推送到模板中。这通过helpers(return Items.find())完美地出现在localhost:3000上的浏览器模板中,但当我运行"流星运行ios"时,数据不会加载到ios模拟器中。

首先,是否有可能期待一个当地的收藏品在科尔多瓦工作?是否应在内部定义:流星。是科多瓦({})吗?是否需要添加特定于科多瓦的包装?我认为在这种情况下,本地收集是必要的,因为数据是基于用户的设备位置及其仅与当前会话相关的位置来检索的。

任何想法都将不胜感激。

(这里是流星角,如果这听起来很愚蠢,对不起!)

编辑:在服务器和客户端上定义的集合可以在浏览器和iOS模拟器中工作。所以问题只出在本地收藏上。

@imslavko
你确实是对的!这是我调用API的服务器上的CORS问题。经过几天的思考,我终于发现服务器没有用于简单GET/POST请求的Access Control Allow Origin:*。

谢谢你帮我弄清楚。

所以事实证明科多瓦与此无关。所有HTTP.get()调用在Cordova内部也能完美工作,包括本地集合。

还有一个技巧需要注意。

HTTP.get('/route')很可能最终会出现在手机的本地服务器上,而不是数据来自的远程服务器上——所以你不会收到你期望的数据。

而是使用

HTTP.get(__meteor_runtime_config__.ROOT_URL + '/route')

因为ROOT_URL变量在Cordova应用程序和普通浏览器中都指向正确的服务器。