2

我正在使用 SproutCore 查询 Mac OSX (10.6.7) 上的 CouchDB 数据库,来自 NetTuts+ premium 的教程。数据库名称是微博。查询解析为此字符串:

"http://localhost:5984/microblog/_design/posts/_view/posts?descending=true"

如果我直接在浏览器的地址栏中键入此查询,我会得到一个不错的 json 答案。但是通过 SproutCore 应用程序,我收到一条错误消息:

405 Method Not Allowed

这是为什么?那是因为 SC 用完了 :4020 而 CouchDB 用完了 :5984 吗?有任何想法吗?

4

1 回答 1

4

由于 Javascript 跨域规定,您不得从浏览器查询任意 URL。如果您从 localhost:4020 加载了您的 sproutcore 页面,则禁止联系同一主机上的任何其他主机或端口。

为了克服这个问题,您通常将您的 sproutcore 主机代理到后端。您可以通过在您的 sproutcore 构建文件中包含如下代理语句来执行此操作

proxy "/microblog", :to => "localhost:5984"

这会将所有发往 localhost:4020/microblog 的请求转发到您的后端 localhost:5984/microblog。正如您可以想象的那样,这可能会导致您无法将 sc 应用程序中的 url 设置为所需值的问题,常见的情况可能是您的 sc 应用程序也被命名为“微博”,上面的代理指令会导致您的 sc应用程序 url 被覆盖。

要解决这个问题,您可以在 sc 应用程序中使用另一个 url 来联系后端,例如 /db,然后使用代理指令中的 url 参数来重写目标 url:

proxy "/db", :to => "localhost:5984", :url => "microblog"

所有对 localhost:4020/db 的请求都会被转发到 localhost:5984/microblog 并且不会再干扰你在 localhost:4020/microblog 上的 sc 应用程序。

于 2011-06-05T10:13:22.317 回答