sails框架的学习指南


Posted in Javascript onDecember 22, 2014

上周通过搭建CMS系统接触到了sails框架,知道一些ORM的概念。这周开始深入后台数据交互,发现twenty框架的数据结构在sails上又设计了一番(比如node、category),不得不说师哥就是厉害。不过复杂度也提高了。而我在DTree项目中的任务就是使用sails来进行业务流程和数据库的交互。这周接下来的时间就是使用sails了。

sails简介

sails如同ruby on rails一样,也是一种为了使web开发变得简单的框架。就我这段时间的了解,其完全继承Express&Socket.io的一些API,并且使用了waterline(ORM)进行统一地数据库交互,使得可以在不同的数据库环境中无需直接修改代码即可完成CRUD操作;与backbone框架同步前后端的数据 ,使用policies中间件来进行安全验证交互 自身的blueprints在前后台中无需码一行即可通过RESTfull API进行数据交互。

Socket.io & Express

前端时间学习过这两样东西,一个是websock通信,一个是处理HTTP的请求。sails并没有从新设计而是直接使用这两个工具来处理这些功能,在学习成本上减少了许多。Socket.io在服务器和客户端两边触发消息、监听消息并相应作出操作。

 `

 //服务器端

 io.sockets.on("connection", function(sock){

 sock.emit("normalMessage",{a:"c"});

 });

 //客服端

 sock.on("normalMessage", function(json){...});

 `

Express的作用就在于路由操作,比如app.get('/login', function(req, res){});。
Sails Blueprints & Backbone
在web开发中,CRUD是一类相似操作,比如在http中get/post,数据库中的select/insert这类。sails的blueprint API和js的backbone框架都使用一类统一的函数(比如findOne),使得程序在建立了model和相应的controller时,内在逻辑就已经建立。比如常用的users model在sails就自建了controller来进行users的数据传递和存储。我们需要注意的只有文件名的规范和业务流程即可。如果你要覆盖(重载)原有方法也是可以的。当我们在config文件夹中的routes设置好action和controller之后,在对应的controller中可以添加自己需要的功能。

Waterline
sails这个依赖包的API是用来与数据库交互的,比如create()、findOne()、update()等,正如前面所说,我们无需在意不同的数据库工具直接统一调用这些方法即可。比如输入数据时

`

Users.create({username: username, password: password}).exec(function(error, user) {

 if (error) {

  res.send(500, {error: "DB Error"});

 } else {

  req.session.user = user;

  res.send(user);

 }

`

系统默认的是本地文件系统保存数据,我们如果需要选择mysql或者mongoDB。只需在配置文件中修改一下,选择数据库的adapter就能进行数据交互。

Policies

应用于controller上的中间件,在http请求发出之前运行。可以实现身份控制,比如你只有登录才能进行接下来的动作。

`

if(req.session.user){

    var action = req.options.action;

    if(action == "create"){

     req.body.userId = req.session.user.id;

        req.body.username = req.session.user.username;

    }

    next();

}else{

    res.send("You Must Be Logged In", 403);

}

`

next

sails成功上手,不过还要在这个上面多下功夫。把基础打牢才好实现具体需求。所以接下来还要继续学习,多找例程深入学习sails,也要知道这个框架的局限性。

Javascript 相关文章推荐
ie focus bug 解决方法
Sep 03 Javascript
javascript Array数组对象的扩展函数代码
May 22 Javascript
JQuery事件e参数的方法preventDefault()取消默认行为
Sep 26 Javascript
jquery引用方法时传递参数原理分析
Oct 13 Javascript
jQuery实现文件上传进度条特效
Aug 12 Javascript
原生javascript实现自动更新的时间日期
Feb 12 Javascript
[原创]JQuery 在表单提交之前修改 提交的值
Apr 14 Javascript
Javascript的无new构建实例详解
May 15 Javascript
浅析JSONP技术原理及实现
Jun 08 Javascript
Angular中$broadcast和$emit的使用方法详解
May 22 Javascript
微信小程序实现张图片合成为一张并下载
Jul 16 Javascript
js设置默认时间跨度过程详解
Jul 17 Javascript
了不起的node.js读书笔记之mongodb数据库交互
Dec 22 #Javascript
javascript动态创建及删除元素的方法
Dec 22 #Javascript
了不起的node.js读书笔记之例程分析
Dec 22 #Javascript
了不起的node.js读书笔记之node的学习总结
Dec 22 #Javascript
了不起的node.js读书笔记之node.js中的特性
Dec 22 #Javascript
jQuery+ajax中getJSON() 用法实例
Dec 22 #Javascript
IE8中动态创建script标签onload无效的解决方法
Dec 22 #Javascript
You might like
PHP获取文件绝对路径的代码(上一级目录)
2011/05/29 PHP
php简单定时执行任务的实现方法
2015/02/23 PHP
你应该知道PHP浮点数知识
2015/05/13 PHP
Yii2框架中日志的使用方法分析
2017/05/22 PHP
PHP排序算法之快速排序(Quick Sort)及其优化算法详解
2018/04/21 PHP
CentOS7系统搭建LAMP及更新PHP版本操作详解
2020/03/26 PHP
浅析jQuery的链式调用之each函数
2010/12/03 Javascript
基于Jquery的$.cookie()实现跨越页面tabs导航实现代码
2011/03/03 Javascript
jquery异步跨域访问代码
2013/06/28 Javascript
Jquery动态进行图片缩略的原理及实现
2013/08/13 Javascript
JQ获取动态加载的图片大小的正确方法分享
2013/11/08 Javascript
Javascript验证用户输入URL地址是否为空及格式是否正确
2014/10/09 Javascript
使用VS开发 Node.js指南
2015/01/06 Javascript
JS随机洗牌算法之数组随机排序
2016/03/23 Javascript
javascript 使用正则test( )第一次是 true,第二次是false
2017/02/22 Javascript
JS对象的深度克隆方法示例
2017/03/16 Javascript
利用JS做网页特效_大图轮播(实例讲解)
2017/08/09 Javascript
Angular8 实现table表格表头固定效果
2020/01/03 Javascript
JS如何实现网站中PC端和手机端自动识别并跳转对应的代码
2020/01/08 Javascript
详解vue 中 scoped 样式作用域的规则
2020/09/14 Javascript
[41:08]TNC vs VG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python文件和目录操作详解
2015/02/08 Python
Python基于Tkinter的HelloWorld入门实例
2015/06/17 Python
基于python的Tkinter实现一个简易计算器
2015/12/31 Python
Python编程实现粒子群算法(PSO)详解
2017/11/13 Python
Python批量合并有合并单元格的Excel文件详解
2018/04/05 Python
分享Python切分字符串的一个不错方法
2018/12/14 Python
python SVD压缩图像的实现代码
2019/11/05 Python
python安装读取grib库总结(推荐)
2020/06/24 Python
祖国在我心中演讲稿450字
2014/09/05 职场文书
放弃遗产继承公证书
2015/01/26 职场文书
2015年清明节扫墓演讲稿
2015/03/18 职场文书
公务员保密工作承诺书
2015/05/04 职场文书
住房公积金贷款工资证明
2015/06/12 职场文书
返乡农民工证明
2015/06/24 职场文书
Java使用Unsafe类的示例详解
2021/09/25 Java/Android