Как связать couchDB с angular.js? - PullRequest
10 голосов
/ 01 июля 2011

Я искал это, но не получил правильный ответ, если мы можем подключить couchDB напрямую с фреймворком angular.js

или

Для этого мы должны воспользоваться помощью node.js.

Ответы [ 5 ]

18 голосов
/ 13 декабря 2012

Я создал модуль AngularJS под названием CornerCouch, который улучшает подход AngularJS $ ресурс, настроив его специально для CouchDB. Он основан на сервисе $ http в AngularJS. Таким образом, я получил хороший чистый код JavaScript, особенно в специфичном для приложения контроллере AngularJS.

угловой угловой модуль JS

Посылка звонков напрямую оставляет три варианта, насколько я знаю:

  • Загрузка html-приложения непосредственно из приложения CouchDB (подход CouchApp)

  • Использовать прозрачный прокси, включенный в проект Jetty (стек приложений Java)

  • Доступ только через GET, но с использованием JSONP, после включения его на сервере CouchDB

Все остальное не попадает под ограничения межсайтового скриптинга.

7 голосов
/ 01 июля 2011

Хотя у меня нет опыта работы с angular.js, если посмотреть на пример Google Buzz , похоже, он имеет дело с ресурсами, предоставляемыми JSON. Так как это именно то, чем является CouchDB, я не думаю, что нужно участвовать в node.js.

Все функции CouchDB могут быть доступны через HTTP-запросы, поэтому они должны подходить, если это необходимо, с помощью вызовов AJAX. angular.service. $ Resource выглядит подходящим кандидатом.

3 голосов
/ 17 сентября 2012

Эшвин, спасибо, что спросил это. Я тоже борюсь с этим вопросом.

Я еще не выяснил, как использовать $ resource для вызова локальной CouchDB из AngularJS, поскольку она использует полный URL-адрес локального хоста, например:

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

и все документы и примеры AngularJS показывают локальные имена путей. Они на самом деле не говорят, как обратиться к отдельному веб-сервису, или, по крайней мере, я не нашел объяснения, которое помогает:)

Вот способ использования jQuery, который мне было легче понять. Я поместил это в файл с именем couch.js - чтобы подключиться к CouchDB наших тварей (собак, кошек и т. Д.). Фактический модуль («приложение») определен в другом месте приложения, поэтому я просто поместил его в переменную с именем «приложение» и добавил контроллер Couch следующим образом:

(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 с браузерами, когда я работал локально, поэтому я установил JSONP = true в настройках CouchDB.

На 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, я был бы благодарен.

1 голос
/ 17 сентября 2012

Хитрость в том, что ваша страница, содержащая запросы к couchdb, должна обслуживаться с того же адреса и порта, что и сама couchdb. Это можно сделать, обслуживая ваш html с помощью couchdb, или установив прокси, который будет действовать как зонтик для вашего веб-сервера, на котором размещены html и couchdb.

0 голосов
/ 13 мая 2013

Я изменил пример на веб-сайте AngularJS, чтобы использовать CouchDB вместо mongolab.См. Jsfiddle здесь http://jsfiddle.net/WarwickGrigg/dCCQF/ и репозиторий github здесь https://github.com/telanova/angularjs-couchdb. Я новичок в угловой ситуации: мне было трудно собрать свой ресурс $ head, но, похоже, он работает хорошо.

$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;
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...