开始使用Node.js、angular.js和MongoDB、建模关系和其他爬坡技巧

开始使用Node.js、angular.js和MongoDB、建模关系和其他爬坡技巧,node.js,mongodb,express,angularjs,Node.js,Mongodb,Express,Angularjs,我来自Java和关系世界,正试图让我的脚湿透。我正在开发的应用程序是一个约会计划系统,在后端使用node.js和MOngo,客户端使用angular.js 我试图理解几个关键概念,它们可能是我Java偏见的残余。如果您有任何关于相关代码片段、教程的帮助,我们将不胜感激 1) 我如何管理Mongo/Node中的约会、客户和服务代表之间的关系?是否创建了约会对象,并在约会中存储了用户id的引用?用户是否需要有约会列表的参考 2) 用户authn/authz,由于节点被用作restful服务提供者,如

我来自Java和关系世界,正试图让我的脚湿透。我正在开发的应用程序是一个约会计划系统,在后端使用node.js和MOngo,客户端使用angular.js

我试图理解几个关键概念,它们可能是我Java偏见的残余。如果您有任何关于相关代码片段、教程的帮助,我们将不胜感激

1) 我如何管理Mongo/Node中的约会、客户和服务代表之间的关系?是否创建了约会对象,并在约会中存储了用户id的引用?用户是否需要有约会列表的参考

2) 用户authn/authz,由于节点被用作restful服务提供者,如何创建基于角色的控件?例如,当用户注册为服务代表时,他应该得到批准。是否有一个模块可以提供帮助

3) 是否有提供用户注册报告等的通用模块

4) 人们如何管理客户端MVC的权限


非常感谢任何指针。

我不熟悉node.js,但对于mongodb设计,您必须在“子文档”和“链接文档”之间进行选择

1

你可以看看

这个想法是在有意义的地方检索一个完整的文档。例如,您可能有以下模式

{ customer : { name: xxx },
  appointments: [ {date: xx, type : xxx .., servicerep: xxx}, {date: xx, type : xxx .., servicerep: xxx} ]
}
尽管信息可能重复,但对于查询,您只点击一个文档/子文档

4


即使它可能是客户端,但这并不意味着服务器不应该进行验证。客户端可以尽可能地进行验证,但服务器仍然应该进行验证。很抱歉,我没有更多的东西要添加。

使用既有服务器端组件又有客户端组件的应用程序会比使用服务器端框架更复杂一些

  • 当使用像AngularJS这样的客户端框架时,所有模板都是在客户端而不是服务器端编译的。这与传统的服务器端渲染有很大区别。这意味着,您将发送JSON,而不是向客户端发送呈现的HTML。您的服务器将本质上成为一个带有安全定位的RESTful API

  • 我不太熟悉AngularJS,更熟悉Ember,但您基本上可以创建一个restful服务:。这将在RESTful接口上与服务器通信

  • 在服务器上,使用nodejs,可以使用类似Mongoose或类似的ORM。您可以创建关系、文档等。。。注意,您必须在服务器和客户机上复制您的模型

  • MongoDB使用bson,一种序列化JSON字符串/对象的二进制编码。由于nodejs是使用v8javascript引擎构建的,因此JSON是一种自然的对象类型,因此使用MongoDB非常简单

  • NodeJS上的HTTP服务器:NodeJS为HTTP服务器提供了一个基本实现。虽然不多,但您可以响应和处理请求。没有会话、cookie和身份验证支持,因此您可以使用构建在传统http服务器之上的
    connect
    ,或者使用构建在
    connect
    和节点提供的正常
    http
    服务器之上的ExpressJS。ExpressJS非常容易入门,并且可以很好地与RESTful后端配合使用


这很简单。获取ExpressJS,创建一个新的应用程序,设置所有客户端的东西(angularJS)和模块系统,如果你使用AMD、CommonJS、Browserify等

你选择MongoDB有什么特别的原因吗?没什么特别的,只是有很多关于NodeMongo的在线教程。你会推荐不同的设置吗?node.js和angular之间没有共享模型的方法吗?我认为这是node.js的一大亮点,因为它是javascript。@SamBarnum我不知道。我目前正在开发一个node.js/browser(Tower)框架,它构建在Ember.js和Express之上。(版本0.5.0-当前版本非常不同)。我们正在探索在混合中添加角度作为选项的可能性。