过去几周我一直在努力使用Angular,Node,TDD,Heroku,Amazon S3等。试图更好地了解如何构建具有可靠后端的完全可扩展的SPA,使用grunt, bower,还没有使用Jasmine在TDD中浸泡我的脚趾,虽然我知道如何通过Karma进行测试,这可能是我的下一步。
有一件事是肯定的:这是很多信息
首先,我玩
并阅读了许多帖子等。
我发现NG Boilerplate是最符合逻辑的结构(就我对这些事情的理解而言)。
作为一个演示项目(从一些非常小的东西演变而来)我想使用以下方法制作单页CRUD应用程序:
现在我想使用Angular-Apps的(https://github.com/angular-app/angular-app)服务器作为我的NGBoilerplate kickstarter的后端
我想知道如何:
我脑子里有一个很大的模糊:)。
答案 0 :(得分:4)
在过去的几个月里,我对这些问题和问题进行了很多讨论,并得出以下结论:
出于我的目的,我需要一个几乎完全依赖Angular的应用程序,没有单独的后端,而现在的后端应该来自Angular。
为什么呢?因为我想把所有的鸡蛋都放在一个篮子里,所以我不想在很多不同的部位配置很多东西。
作为我项目的基础,我最终使用ng-boilerplate作为样板:),对开发过程,Grunt任务等进行了一些更改,这是每个人都要弄清楚的,具体取决于每个特定的项目。 / p>
嗯,我要在这里触及的主要问题是,对于Angular中的真正后端,我们需要安全路由和安全持久性方法,数据库。
对于应用程序,我利用了ng-boilerplate的模块化和依赖感知结构,我认为它非常适合Angular应用程序。
无论如何,我要从上到下(最终产品明智,如上所述构建环境,这取决于你,但是ng-boilerplate很棒),我们走了。
现在,为了持久性,要具有身份验证和安全性,而不是依赖后端,我使用的是firebase(https://www.firebase.com/),那里有一些很棒的教程可以帮助你实现真正的持久性你的Angular APP,当你登录时有路由,当你登录时访问数据库中的自定义表/对象等。这是真正的交易。
如果您不想依赖OAuth可能的网站登录(Facebook,github,角色或推特)并想要自定义电子邮件和地址,您可以直接使用Firebase,创建帐户并删除它们等。< / p>
FIREBASE Angular Backend。
因此,Firebase就像他们在网站上所说的那样,是一个功能强大的API,可以实时存储和同步数据。
我不知道如何处理这个问题,所以我要创建一个Firebase数据库。一旦我们创建它,在后端我们有几个选项,其中一个是安全性。
{
"rules": {
".read": true,
".write": "auth != null"
}
}
在此,如果我们阅读https://www.firebase.com/docs/security/security-rules.html上的文档,我们将了解到我们可以为每个“表格”添加规则。在我们的数据库中,所以我们可以拥有3个受保护的'table'对象和一些不受保护的对象。
我们可以根据不同的规则保护每个用户的表格,如果登录或不登录,我们也有规则的继承等,请在那里阅读文档,这真的是一个很好的阅读。
现在,要使这些规则生效,我们需要启用Firebase简单登录,并从Facebook,Twitter,Github,Persona,电子邮件和密码以及匿名中选择所需的登录方式。
对于真正的应用程序,我们还需要将信息也以匿名(用户会话等)的形式写入DB,并且还要记录(使用上述任一选项)来存储和读取信息。
我,我想快速简单地进行Facebook身份验证,阅读那里的文档,我制作了一个快速的Facebook应用程序,在Facebook上的应用程序设置中,我正在使用Firebase的后端https://www.dropbox.com/s/xcd4b8tty1nlbm5/Screenshot%202014-01-22%2013.51.26.png
这提供了登录Facebook的临时链接,并且可以访问“表格”,如果规则为auth !=null
,则会锁定这些“表格”。
现在,进入Angular后端。
Firebase为我们的应用程序提供了一个库,还为Angular提供了一个SimpleLogin库,一个名为AngularFire的工厂服务。
就我而言,我使用连接到我的数据库的使用方法创建了本地firebaseService:
angular.module('firebaseService', ['firebase'])
.service('firebaseService', function ($firebase, $rootScope) {
//Input data in Firebase
var URL = "https://glowing-fire-xxxx.firebaseio.com";
var tellFirebase = function(ID, JSON) {
users = $firebase(new Firebase(URL + '/' + ID));
users.details = JSON;
users.$save('details');
};
return {
addUser: function(ID, JSON) {
tellFirebase(ID, JSON);
if ($rootScope.debugStatus === true) {
console.log('Firebase Service .addUSer Called');
}
},
getUser: function(ID) {
if ($rootScope.debugStatus === true) {
console.log('Firebase Service .getUser Called');
}
}
};
})
从这里开始我们的READ / WRITE,在控制器的页面上我有这个:
值得注意的是,我有一个中间件服务(storageManagement),我在Firebase和MongoDB之间切换,以避免混淆。
.controller( ‘SomeCtrl', function SomeController( $scope, storageManagement, $firebase, $firebaseSimpleLogin ) {
/*===========================
* ==== FIREBASE LOGIN
* ===========================*/
var URL = "https://glowing-fire-XXXXX.firebaseio.com";
var users = new Firebase(URL);
$scope.auth = $firebaseSimpleLogin(users, function(error, user){});
if ($scope.auth.user == null) {
//$scope.auth.$login('facebook');
}
console.log($scope.auth);
//$scope.auth.$logout('facebook');
$scope.doLogin = function() {
console.log($scope.facebookemail);
console.log($scope.facebookpassword);
$scope.auth.$login('facebook');
$scope.$on("$firebaseSimpleLogin:login", function(evt, user) {
storageManagement.runFirebase();
});
/* example of logging in while asking access to permissions like email, user_list, friends_list etc.
* auth.$login('facebook', {
rememberMe: true,
scope: 'email,user_likes'
});*/
};
$scope.doLogout = function() {
$scope.auth.$logout();
};
});
我将$ firebase服务添加到我的控制器,以及$ firebaseSimpleLogin服务。
这里显示范围两个按钮,登录/注销,从Facebook弹出OAuth窗口,电子邮件/密码设置你不需要经历这个我认为,为了充分理解请阅读firebase上的完整文档。
所以,一旦我们被记录,我们就可以访问规则中描述的表格,如果我们选择电子邮件/密码,实际上即使是Facebook或其他方法,我们也可以为某些IDENTITIES分配某些规则,所以你可以拥有一个ADMIN表,在那里你可以保存在页面加载时获得READ的设置以应用你想要的任何内容。
现在,通过路线,我们可以检查$ scope.auth状态,如果WE PUT IT IN $ rootScope,并检查进入路线的状态,如果状态检查,我们到达那条路线并且它从数据库获取填充内容,否则,即使有人攻击该路由,它也不会看到任何内容,因为没有权限为未授权/错误的电子邮件用户读取该表。
这是基于这篇文章http://www.ng-newsletter.com/posts/back-end-with-firebase.html的松散基础......我很难改变那个人在那里写的心态,但是,经过一整天,阅读文档(并设置中间件,心灵)你来自Firebase我发现了它,它确实有效。
与DB的连接暴露在一个BIG对象中,您可以在其中执行任何操作。
这不是最完整的解释,但是它应该能帮助你做出一些很棒的事情:D
答案 1 :(得分:3)
我遇到的最好的例子叫做angular-app。
它非常全面,可满足您的所有需求。它是由着名的“使用AngularJS掌握Web应用程序开发”一书的作者之一撰写的。
https://github.com/angular-app/angular-app
来自github回购:
AngularJS CRUD应用程序演示 目的
这个想法是演示如何使用AngularJS编写一个典型的,非平凡的CRUD应用程序。为了在最有利的环境中展示AngularJS,我们开始编写一个简化的项目管理工具,支持使用SCRUM方法的团队。示例应用程序尝试显示最佳实践:文件夹结构,使用模块,测试,与REST后端通信,组织导航,解决安全问题(身份验证/授权)。
我们在邮件列表中使用和支持AngularJS时学到了很多,并希望分享我们的经验。
堆栈
持久性存储:在MongoLab上托管的MongoDB 后端:Node.js 客户端上的Awularome AngularJS CSS基于Twitter的bootstrap 构建
这是一个完整的项目,其构建系统专注于AngularJS应用程序,并与AngularJS社区中常用的其他工具紧密集成:
由Grunt.js提供支持 使用Jasmine语法编写的测试 测试由Karma Test Runner执行(与Grunt.js构建集成) 构建支持JS,CSS和AngularJS模板缩小 Twitter的引导程序将LESS模板处理集成到构建中 Travis-CI整合