繁体   English   中英

如何将 couchDB 与 angular.js 连接?

[英]How to connect couchDB with angular.js?

我已经搜索过了,但如果我们可以直接将 couchDB 与 angular.js 框架连接,我没有得到正确的答案

或者

为此,我们必须借助 node.js。

我创建了一个名为 CornerCouch 的 Z5129F9F9F4810757F6F0CF735675EB0541Z 模块,它通过专门为 CouchDB 定制它改进了 AngularJS $resource 的方法。 它基于 AngularJS 中的 $http 服务。 我最终得到了干净整洁的 JavaScript 代码,尤其是在应用程序特定的 AngularJS controller 中。

CornerCouch AngularJS 模块

据我所知,直接拨打电话会留下三个选择:

  • 直接从 CouchDB 附件加载 html 应用程序(CouchApp 方法)

  • 使用 Jetty 项目(Java 应用程序堆栈)中包含的透明代理

  • 在 CouchDB 服务器上启用后,仅通过 GET 访问,但使用 JSONP

其他一切都不受跨站点脚本限制。

虽然我没有 angular.js 的经验,但看看Google Buzz 示例,它似乎有办法处理提供 JSON 的资源。 由于这正是 CouchDB 的本质,我认为没有必要让 node.js 参与其中。

所有 CouchDB 功能都可以通过 HTTP 请求访问,因此它应该适合,如有必要,通过执行 AJAX 调用。 angular.service.$resource看起来是合适的候选者。

阿什文,谢谢你问这个。 我也在这个问题上挣扎。

我还没有弄清楚如何使用 $resource 从 AngularJS 调用本地 CouchDB,因为它使用完整的本地主机 URL,如下所示:

http://localhost:5984/<dbname>/_all_docs

并且所有 AngularJS 文档和示例都显示了本地路径名。 他们并没有真正告诉人们如何联系单独的 web 服务,或者至少我没有找到有帮助的解释:)

这是一种使用 jQuery 的方法,我更容易理解。 我将它放在一个名为 couch.js 的文件中 - 以连接到我们的小动物(狗、猫等)的 CouchDB。 实际的模块(“app”)在应用程序的其他地方定义,所以我只是把它放在一个名为“app”的变量中,并添加了一个 Couch controller,如下所示:

(function () {
    'use strict';
    var app = angular.module('app');
    app.controller('CouchCtrl', function ($scope,$http,$resource) {
        var all_critters = 'http://localhost:5984/critters/_all_docs?callback=?';
        $.getJSON(all_critters, function(json) {
            $scope.$apply(function(){
                $scope.all_critters = json;
            });
        });
        $scope.getAllCritters = function() {
            return $scope.all_critters;
        };
    });
}());

我添加了?callback=? 为了让 JSONP 在本地工作时避免浏览器出现 localhost 安全问题,因此我在 CouchDB 首选项中设置了 JSONP = true。

在 html 页面中,只需通过将 crittersDB 放入绑定来查看此调用的结果:

<ul ng-controller="CouchCtrl">
    <h5>Critters</h5>
    <p>There are currently {{all_critters.total_rows}} critters.</p>
    <li ng-repeat="(key,value) in all_critters">
        {{key}} - {{value}}
    </li>
</ul>

如果有人可以发布一些实际的 AngularJS $ 资源代码来复制此 jQUery.getJSON 方法,将数据从 CouchDB 提取到 AngularJS 应用程序中,我将不胜感激。

诀窍是您的页面包含对 couchdb 的查询必须从与 couchdb 本身相同的地址和端口提供服务。 这可以通过 couchdb 为您的 html 提供服务来实现,或者通过安装一个代理来充当托管 html 和 couchdb 的 web 服务器的保护伞。

我已经修改了 AngularJS 网站上的示例以使用 CouchDB 而不是 mongolab。 请参阅此处的jsfiddle http://jsfiddle.net/WarwickGrigg/dCCQF/和 github 存储库此处https-couchdb /github.com 我是一个 angular 新手:我发现很难让我的头脑围绕 $resource,但它似乎运作良好。

$scope.projects = ProjectCouch.get({q:'_all_docs', include_docs: 'true', limit: 10});

angular.module('CouchDB', ['ngResource']).
    factory('ProjectCouch', function($resource) {
        var ProjectCouch = $resource(':protocol//:server/:db/:q/:r/:s/:t',
                                     {protocol: 'http:', server: 'localhost:5984', db:'projects'}, {update: {method:'PUT'}   
                           }
   ); 

   ProjectCouch.prototype.update = function(cb) {
    return ProjectCouch.update({q: this._id},
        this, cb);
  };

  ProjectCouch.prototype.destroy = function(cb) {
      return ProjectCouch.remove({q: this._id, rev: this._rev}, cb);
  };

  return ProjectCouch;
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM