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 相关文章推荐
jquery.validate使用攻略 第三部
Jul 01 Javascript
JavaScript中for-in遍历方式示例介绍
Feb 11 Javascript
js动态切换图片的方法
Jan 20 Javascript
jQuery插件slider实现拖动滑块选取价格范围
Apr 30 Javascript
js 上传文件预览的简单实例
Aug 16 Javascript
利用Jasmine对Angular进行单元测试的方法详解
Jun 12 Javascript
vue如何从接口请求数据
Jun 22 Javascript
详解如何优雅地在React项目中使用Redux
Dec 28 Javascript
微信小程序实现默认第一个选中变色效果
Jul 17 Javascript
使用validate.js实现表单数据提交前的验证方法
Sep 04 Javascript
详解如何运行vue项目
Apr 15 Javascript
javascript设计模式 ? 模板方法模式原理与用法实例分析
Apr 23 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
ThinkPHP框架设计及扩展详解
2014/11/25 PHP
php实现RSA加密类实例
2015/03/26 PHP
PHP随手笔记整理之PHP脚本和JAVA连接mysql数据库
2015/11/25 PHP
Laravel中错误与异常处理的用法示例
2018/09/16 PHP
Laravel推荐使用的十个辅助函数
2019/05/10 PHP
javascript 实现子父窗体互相传值的简单实例
2014/02/17 Javascript
javascript设计模式之工厂模式示例讲解
2014/03/04 Javascript
jQuery数据缓存用法分析
2015/02/20 Javascript
jquery实现选中单选按钮下拉伸缩效果
2015/08/06 Javascript
浅谈JS中json数据的处理
2016/06/30 Javascript
Bootstrap禁用响应式布局的实现方法
2017/03/09 Javascript
webpack教程之webpack.config.js配置文件
2017/07/05 Javascript
[js高手之路]原型式继承与寄生式继承详解
2017/08/28 Javascript
Vue中插入HTML代码的方法
2018/09/21 Javascript
ES6中Symbol、Set和Map用法详解
2019/08/20 Javascript
Nodejs 微信小程序消息推送的实现
2021/01/20 NodeJs
[02:39]DOTA2国际邀请赛助威团西雅图第一天
2013/08/08 DOTA
python类型强制转换long to int的代码
2013/02/10 Python
讲解Python中的标识运算符
2015/05/14 Python
Python中的if、else、elif语句用法简明讲解
2016/03/11 Python
python求最大连续子数组的和
2018/07/07 Python
详解python使用turtle库来画一朵花
2019/03/21 Python
Python+threading模块对单个接口进行并发测试
2019/06/25 Python
Python Django2 model 查询介绍(条件、范围、模糊查询)
2020/03/16 Python
Python基于DB-API操作MySQL数据库过程解析
2020/04/23 Python
浅析CSS3 用text-overflow解决文字排版问题
2020/10/28 HTML / CSS
HTML5的结构和语义(3):语义性的块级元素
2008/10/17 HTML / CSS
linux面试题参考答案(9)
2015/01/07 面试题
教师专业理论水平的自我评价分享
2013/11/09 职场文书
幼儿园教师国培感言
2014/02/02 职场文书
旅游市场营销方案
2014/03/09 职场文书
小学教师寄语大全
2014/04/03 职场文书
房屋产权证明书
2014/10/15 职场文书
构建和谐校园倡议书
2015/01/19 职场文书
Spring中的使用@Async异步调用方法
2021/11/01 Java/Android
解决 Redis 秒杀超卖场景的高并发
2022/04/12 Redis