MEAN框架学习笔记(一)

2015-07-21 16:26:30 · 作者: · 浏览: 0

MEAN框架学习笔记


MEAN开发框架的资料很少,主要的资料还是来自于learn.mean.io网站上的介绍。于是抱着一种零基础学习的心态,在了解的过程中,通过翻译加上理解将MEAN框架一点点消化并且吸收,一步一步来,慢慢地记录我学习MEAN的点点滴滴。


1、MEAN是能够管理用户的
通过MEAN的mean-cli来管理用户。命令是:
$ mean user 
  
   
$ mean user 
   
     --addRole 
    
     ; $ mean user 
     
       --removeRole 
      
       ;
      
     
    
   
  
2、MEAN可以列举也可以安装和卸载模块

MEAN的模块安装后放在/node_modules文件夹中。
$ mean list
$ mean install 
  
   
$ mean uninstall 
   
  

3、自定义的包应该放在
/package/custom
文件夹中,而需要贡献的包则放在
/package/contrib
文件夹中。

4、核心包中有:
system:基本页面、整体页面布局、渲染引擎、静态文件、客户端到服务端的路由等。
user:提供用户注册 数据库模型以及登录和注册的相关验证。
access:管理权限以及中间件,它包含了很多授权方法依赖user包。
theme:有关CSS以及图片和背景资源。
articles:可以看成是博客以及CMS管理内容的一个起点,在客户端以及服务端它包含了完整的增删改查操作(GRUD)。


5、所有的包都有它们对应的客户端和服务端部分。客户端部分在public文件夹中,其中有:
asset: Javascript代码、CSS以及图片等;
controllers:前端框架Angular的控制器。
config:包含了路由文件。
services:Angular服务(还有directives和filter文件夹)
views:Angular视图


服务端部分在Server文件夹中,其中有:
config:配置文件
controllers:Angular控制器
models:数据库Schema模型
routes:REST API路由端
views:基于SWIG的 html渲染


6、依赖注入(Dependency Injection)
MEAN的依赖注入能够在你声明你所需要的依赖时自动解析系统所拥有的包来为你解析所有的依赖。任何注册过的包,都会在你声明依赖的时候变得可用。
比如说,在某个包的根目录下,有app.js文件,这其中包含的注册方法中,就用到了依赖注入。
这里MyPackage在注册的时候,依赖了名为Tokens的包。
// Example of registering the tokens package
MyPackage.register(function(app, auth, database, Tokens) {


  // I can make use of the tokens within my module
  MyPackage.someExampleFunction('some parameter');


  // I can override functions
  MyPackage.someExampleFunction = function(param) {
    //my custom logic goes here
  };
});

7、Angular模块和依赖
在注册每一个包的时候,都会自动创建一个mean.[package_name]这样的Angular模块。
同时你能够声明你的Angular模块需要使用的Angular依赖。比如说这样:
// Example of adding an angular dependency of the ngDragDrop to the
MyPackage.angularDependencies(['ngDragDrop']);

8、物件和聚合(Assets and Aggregation)
所有的物件(包括java script脚本、 CSS和图片等)被放在public/assets文件夹中。
java script脚本、CSS和图片能被聚合到全局的聚合文件中。默认所有java script脚本会包裹在匿名的函数中,除非{global:true}没有放置在被包含的域中。
 
 
//Adding jquery to the mean project MyPackage.aggregateAsset('js','jquery.min.js'); //Adding another library - global by default is false MyPackage.aggregateAsset('js','jquery.min.js', {global:true}); //Adding some css to the mean project MyPackage.aggregateAsset('css','default.css');
 没有放在assets文件夹中的java script文件会被聚合和注入到mean项目中。如果不像这么做,那么应当放置在public/assets/js文件夹中。聚合操作支持控制聚合代码所放的位置。通常需要添加一个weight和group变量来确定它是否在正确的位置。 
 
MyPackage.aggregateAsset('js','first.js',{global:true,  weight: -4, group: 'header'});

9、Settings对象
Settings对象是持久型对象,允许你在每一个包中保存持久信息比如说配置选项或者是管理信息。
可以通过settings这个函数来获取和保存持久信息。比如说:
MyPackage.settings({'someSetting':'some value'}, function (err, settings) {
    // You will receive the settings object on success
});


// Another save settings example this time with no callback
// This writes over the last settings.
MyPackage.settings({'anotherSettings':'some value'});


// Get settings. Retrieves latest saved settings
MyPackage.settings(function (err, settings) {
  // You now have the settings object
});
当存入信息的时候,第一个参数是JSON格式信息,第二个参数是回调函数。回调函数用来判断信息是否存入,第二个参数是可选的。当读取信息的时候,只需要一个参数即可。这个参数就是回调函数。

10、Express路由
所有到服务端控制器的路由都是由Express控制的。包 系统将会沿着包的对象一直传递到路由文件。通常是/server/routes/myPackages.js。
默认的话routes函数有其它的一些参数:
MyPackage.routes(app, auth, database);
下面是位于ser