4

我正在制作一个非常简单的 webapp 原型。我今天安装了 Couch 1.3.1 并创建了一个数据库。我正在尝试使用来自客户端浏览器的 POST 将文档保存到我的本地沙发(本地主机:5984),但端口不同(6789)

var dbIp = "http://localhost:5984/commute";
var data = {state:0,timestamp:"faketime"};
$.ajax({
  type: 'POST',
  crossDomain: true,
  contentType: "application/json",
  url: dbIp,
  data: data,
  success: function(result) {
    console.log(result);
  }
});

我得到:

XMLHttpRequest cannot load http://localhost:5984/commute-tracker. Origin http://localhost:6789 is not allowed by Access-Control-Allow-Origin.

我已修改 local.ini 以启用 CORS,如couchdb 规范中所述

[httpd]
enable_cors = true
[cors]
origins = *
[cors]
methods = GET, POST, PUT, DELETE

我可以看到所有这些更改都反映在蒲团的配置文件中。我还用 curl 测试了数据库:

curl -X POST localhost:5984/commute -H "Content-Type: application/json" -d '{"tags":"sure","name":"made it"}'

curl 工作得很好,但由于访问控制允许来源,我无法在浏览器中进行类似的 POST。我还缺少什么,或者我可以改变什么来使这个 POST 成为可能?

4

1 回答 1

0

尝试做跨域,无论是 CORS 还是 JSONP 都不理想。

由于您实际上控制了 Web 服务器实例和 couchdb 实例(我假设您对服务器拥有管理员权限),我建议使用反向代理将 couchdb 作为主 Web 应用程序的端点。

如果您使用 Apache mod_proxy将允许您这样做,或者 nginx 是另一个很棒的 HTTP 反向代理服务器...插入一个配置指令,如:

ProxyPass /couch_db/ http://www.localhost:5984/(对于 mod_proxy)

会让你发帖到http://localhost:6789/couch_db/commute

于 2015-01-10T16:41:09.517 回答