0

我正在尝试jquery.couch.js在我的应用程序中进行沙发操作ember.js,但我遇到了 cors 问题,我不知道什么是好的解决方案。

在我看来,在端口 5984 上运行的沙发会使其基本上无法使用?为什么对不同端口的请求会导致 cors 问题?其他人到底是怎么睡沙发上班的?我非常困惑,不知道如何进行。

我的沙发实例从以下位置返回curl

{"couchdb":"Welcome","version":"1.2.0"}

我没有成功尝试运行的代码是这样的:

$.couch.urlPrefix = "http://127.0.0.1:5984";
$.couch.login({
    name: 'name',
    password: 'secret'
});

我已经urlPrefix多次修改该部分,例如localhost并删除http://两个版本的部分。

它抛出的错误:

XMLHttpRequest cannot load http://127.0.0.1:5984/_session. Origin http://localhost is not allowed by Access-Control-Allow-Origin.

帮我!我谦虚地承认我这么说的菜鸟,但是如果这直接内置到基本功能中,那么 couchdb 有什么用呢?

哦,我包括jquery.couch.js这样的:

<script src="http://localhost:5984/_utils/script/jquery.couch.js"></script>

使用这个版本的 jquery:

jQuery JavaScript Library v1.10.2

并使用 jquery migrate 因为以前的问题:

<script src="http://code.jquery.com/jquery-migrate-1.2.1.js"></script>

编辑

我刚刚尝试添加crossDomain: true, xhrFields: {withCredentials: true}到我的login通话中,但无济于事。完全相同的错误消息。我显然错过了一个核心概念。

4

2 回答 2

3

您看到的消息是指服务器,而不是客户端。正如您所报告的,对客户呼叫所做的更改不会改变结果。

特别是在 CouchDB 1.4 中,必须显式启用 CORS 支持,并且必须进行来源声明。也就是说,根据您使用 CouchDB 实例的方式,有两种方法可以启用它:

  • 直接更改您的设置local.ini并重新启动您的实例,请参阅此处了解更多信息:http ://wiki.apache.org/couchdb/CORS
  • 如果您futon有空,请转到设置并在那里找到设置并启用它,在这种情况下不需要重新启动。

更新

似乎 CORS 部分默认情况下并不总是存在,在这种情况下只需自己添加即可。

希望能帮助到你。

于 2013-10-13T19:04:57.087 回答
0

对于那些使用 Cookie 身份验证(不是密码身份验证)并在 CouchDB 服务器返回的 Ajax 请求中重用 cookie 的用户,您仍然需要在对 CouchDB 的 $.ajax() 请求中执行此操作:

xhrFields: {withCredentials: true},

这意味着您必须打开从沙发服务器获取的 jquery.couch.js 文件并手动将该选项插入到 javascript 中。

如果不在客户端执行此操作并在服务器端设置“credentials=true”, CORS我不起作用。

现在编写的原始 jquery.couch.js 不支持客户端使用 CORS 发送 Cookie,因此您必须自己进行操作,直到有人打开票证才能修复此问题。

于 2015-11-23T15:45:49.210 回答