我正在使用SproutCore从NetTuts + premium的教程中查询Mac OSX(10.6.7)上的CouchDB数据库。数据库名称是微博。查询解析为此字符串:
"http://localhost:5984/microblog/_design/posts/_view/posts?descending=true"
如果我直接在浏览器的地址栏中输入此查询,我会得到一个很好的json答案。但是通过SproutCore应用程序,我收到一条错误消息:
405 Method Not Allowed
为什么?那是因为SC耗尽了:4020和CouchDB耗尽了:5984?有什么想法吗?
答案 0 :(得分:4)
由于Javascript跨域规则,您不能从浏览器查询任意URL。如果从localhost:4020加载sproutcore页面,则禁止联系同一主机上的任何其他主机或端口。
要解决此问题,通常会将sproutcore主机代理设置为后端。您可以通过在sproutcore构建文件
中包含如下所示的代理语句来完成此操作proxy "/microblog", :to => "localhost:5984"
将所有请求转发到localhost:4020 /微博到你的后端localhost:5984 /微博。您可以想象这可能导致您无法将sc应用程序中的url设置为所需值的问题,常见的情况可能是您的sc应用程序也被命名为“微博”上面的代理指令会导致您的sc应用网址被覆盖。
要解决此问题,您可以在sc应用程序中使用其他网址来联系后端,例如: / db然后使用proxy指令中的url参数重写目标url:
proxy "/db", :to => "localhost:5984", :url => "microblog"
对localhost:4020 / db的所有请求将被转发到localhost:5984 /微博,并且不再干扰localhost:4020 /微博上的sc应用程序。