如何在MacOSX中将SproutCore连接到CouchDB

如何在MacOSX中将SproutCore连接到CouchDB,couchdb,sproutcore,http-status-code-405,Couchdb,Sproutcore,Http Status Code 405,我正在使用SproutCore查询MacOSX(10.6.7)上的CouchDB数据库,该数据库来自NetTuts+premium教程。数据库名为microblog。查询将解析为此字符串: "http://localhost:5984/microblog/_design/posts/_view/posts?descending=true" 如果我直接在浏览器的地址栏中输入这个查询,我会得到一个很好的json答案。但通过SproutCore应用程序,我收到一条错误消息: 405 Method N

我正在使用SproutCore查询MacOSX(10.6.7)上的CouchDB数据库,该数据库来自NetTuts+premium教程。数据库名为microblog。查询将解析为此字符串:

"http://localhost:5984/microblog/_design/posts/_view/posts?descending=true"
如果我直接在浏览器的地址栏中输入这个查询,我会得到一个很好的json答案。但通过SproutCore应用程序,我收到一条错误消息:

405 Method Not Allowed

为什么呢?那是不是因为SC用完了:4020,CouchDB用完了:5984?有什么想法吗?

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

为了克服这个问题,您通常将sproutcore主机代理设置为后端。您可以通过在sproutcore构建文件中包含如下代理语句来实现这一点

proxy "/microblog", :to => "localhost:5984"
这将把所有发送到localhost:4020/微博的请求转发到后端localhost:5984/微博。您可以想象,这可能会导致无法将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应用程序。

我不知道SproutCore,但是
405 Method not Allowed
表示您发出了错误的HTTP命令。浏览器执行
获取
。SproutCore正在做其他事情。检查您的CouchDB日志,看看是什么查询导致405方法不被允许。谢谢Steffen-一个非常清楚的解释。我马上试试这个。