我已经搜索过了,但如果我们可以将 couchDB 直接与 angular.js 框架连接,则没有得到正确的答案
或者
为此,我们必须借助 node.js。
我已经搜索过了,但如果我们可以将 couchDB 直接与 angular.js 框架连接,则没有得到正确的答案
或者
为此,我们必须借助 node.js。
我创建了一个名为 CornerCouch 的 AngularJS 模块,它通过专门为 CouchDB 定制它改进了 AngularJS $resource 的方法。它基于 AngularJS 中的 $http 服务。我以这种方式最终得到了干净整洁的 JavaScript 代码,尤其是在应用程序特定的 AngularJS 控制器中。
据我所知,直接拨打电话会留下三个选择:
直接从 CouchDB 附件加载 html 应用程序(CouchApp 方法)
使用 Jetty 项目(Java 应用程序堆栈)中包含的透明代理
在 CouchDB 服务器上启用后,仅通过 GET 访问,但使用 JSONP
其他一切都不受跨站点脚本限制。
虽然我没有使用 angular.js 的经验,但看看Google Buzz 示例,它似乎有办法处理提供 JSON 的资源。由于这正是 CouchDB 的本质,我认为不需要涉及 node.js。
所有 CouchDB 功能都可以通过 HTTP 请求访问,因此它应该适合,如有必要,通过执行 AJAX 调用。angular.service .$resource看起来是合适的候选者。
Ashvin, thanks for asking this. I too struggle with this issue.
I have not yet figured out how to use $resource to call the local CouchDB from AngularJS, since it uses a full localhost URL like this:
http://localhost:5984/<dbname>/_all_docs
and all of the AngularJS docs and examples show local pathnames. They don't really tell one how to reach out to a separate web service, or at least I haven't found an explanation that helps :)
Here's a way to use jQuery that was easier for me to understand. I placed this in a file named couch.js - to connect to a CouchDB of our critters (dogs, cats, etc). The actual module ("app") is defined elsewhere in the app, so I just put it in a variable named "app" and added a Couch controller like so:
(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;
};
});
}());
I added the ?callback=? for JSONP to avoid localhost security issues with the browsers while I worked locally, so I set JSONP = true in the CouchDB preferences.
In an html page, just look at the result of this call by putting crittersDB in a binding:
<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>
If anyone could post some actual AngularJS $resource code to replicate this jQUery.getJSON way of pulling data from CouchDB into an AngularJS app, I'd appreciate it.
诀窍是您的页面包含对 couchdb 的查询必须从与 couchdb 本身相同的地址和端口提供服务。这可以通过 couchdb 为您的 html 提供服务来实现,或者通过安装一个代理来充当托管 html 和 couchdb 的 Web 服务器的保护伞。
我已经修改了 AngularJS 网站上的示例以使用 CouchDB 而不是 mongolab。请参阅此处的 jsfiddle http://jsfiddle.net/WarwickGrigg/dCCQF/和此处的 github 存储库https://github.com/telanova/angularjs-couchdb。我是一个有棱有角的新手:我发现让我的头脑围绕 $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;
});