2011-06-04 62 views
2

我正在使用SproutCore從Mac OSX(10.6.7)上的一個CouchDB數據庫查詢NetTuts +高級教程。數據庫名稱是微博。查詢決心字符串:如何在Mac OSX中將SproutCore連接到CouchDB

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

如果我直接在瀏覽器地址欄中鍵入此查詢,我得到一個不錯的JSON的答案。但通過SproutCore應用程序,我收到一條錯誤消息:

405 Method Not Allowed 

這是爲什麼?那是因爲SC缺少:4020和CouchDB超出:5984?有任何想法嗎?

+0

我不知道SproutCore,但'405方法不允許'意味着你正在發出錯誤的HTTP命令。瀏覽器執行'GET'。 SproutCore正在做其他事情。 – 2011-06-04 06:00:43

+0

檢查您的CouchDB日誌,查看導致什麼查詢405方法不允許。 – JasonSmith 2011-06-04 10:42:23

回答

4

由於Javascript跨域規定,您不允許從瀏覽器查詢任何任意網址。如果您從localhost:4020加載了sproutcore頁面,則禁止與同一主機上的任何其他主機或端口聯繫。

爲了克服這個問題,你通常會讓你的sproutcore主機代理到後端。 4020 /微博到後端本地主機:5984 /微博您可以通過像你SproutCore的以下委託書構建文件

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

將轉發所有的請求,去到localhost做到這一點。正如你可以想象的,這可能會導致你無法將sc應用程序中的url設置爲期望值的問題,常見的情況可能是你的sc應用程序也被命名爲「microblog」,上面的代理指令會導致你的sc應用程序網址被覆蓋。

要解決該問題,您可以在您的sc應用程序中使用另一個URL來聯繫後端,例如,/DB,然後使用URL參數在代理指令重寫的目標URL:

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

所有請求到localhost:4020/DB將被轉發到本地主機:5984 /微博,不再幹擾你在localhost:4020 /微博上的sc應用程序。

+0

謝謝Steffen--一個非常明確的解釋。我會馬上嘗試。 – 2011-06-06 20:11:40