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 顺便学习下CSS选择器 奇偶匹配nth-child(even)
May 24 Javascript
JavaScript分析、压缩工具JavaScript Analyser
Dec 31 Javascript
jQuery使用hide方法隐藏页面上指定元素的方法
Mar 30 Javascript
javascript拖拽效果延伸学习
Apr 04 Javascript
BootStrap使用popover插件实现鼠标经过显示并保持显示框
Jun 23 Javascript
js实现模糊匹配功能
Feb 15 Javascript
浅谈vue项目优化之页面的按需加载(vue+webpack)
Dec 11 Javascript
vue中如何使用ztree
Feb 06 Javascript
基于Vue2.X的路由和钩子函数详解
Feb 09 Javascript
vue中 this.$set的用法详解
Sep 06 Javascript
JavaScript实现电灯开关小案例
Mar 30 Javascript
JS 5种遍历对象的方式
Jun 16 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 分页类实现代码
2009/12/03 PHP
php读取xml实例代码
2010/01/28 PHP
php遍历数组的方法分享
2012/03/22 PHP
php 模拟GMAIL,HOTMAIL(MSN),YAHOO,163,126邮箱登录的详细介绍
2013/06/18 PHP
php获取用户浏览器版本的方法
2015/01/03 PHP
thinkphp中的url跳转用法分析
2016/07/12 PHP
PHP自动识别当前使用移动终端
2018/05/21 PHP
jquery判断元素的子元素是否存在的示例代码
2014/02/04 Javascript
JavaScript中length属性的使用方法
2015/06/05 Javascript
跟我学习javascript的arguments对象
2015/11/16 Javascript
深入剖析JavaScript中的函数currying柯里化
2016/04/29 Javascript
浅谈jquery高级方法描述与应用
2016/10/04 Javascript
webpack入门+react环境配置
2017/02/08 Javascript
bootstrap Table服务端处理分页(后台是.net)
2017/10/19 Javascript
微信小程序实现录音时的麦克风动画效果实例
2019/05/18 Javascript
elementui更改el-dialog关闭按钮的图标d的示例代码
2020/08/04 Javascript
Python入门篇之数字
2014/10/20 Python
Python常用的内置序列结构(列表、元组、字典)学习笔记
2016/07/08 Python
Python调用百度根据经纬度查询地址的示例代码
2019/07/07 Python
django数据关系一对多、多对多模型、自关联的建立
2019/07/24 Python
pytorch 归一化与反归一化实例
2019/12/31 Python
python3中datetime库,time库以及pandas中的时间函数区别与详解
2020/04/16 Python
用python写一个带有gui界面的密码生成器
2020/11/06 Python
纯CSS3实现8组超炫酷鼠标滑过图片动画
2016/03/16 HTML / CSS
中科前程Java笔试题
2016/11/20 面试题
建筑经济管理专业求职信分享
2014/01/06 职场文书
小学教研工作制度
2014/01/15 职场文书
趣味运动会策划方案
2014/06/02 职场文书
公司委托书格式范本
2014/09/16 职场文书
银行竞聘报告范文
2014/11/06 职场文书
祝福语集锦:给百岁老人祝寿贺词
2019/11/19 职场文书
一文搞懂如何实现Go 超时控制
2021/03/30 Python
MySQL表字段时间设置默认值
2021/05/13 MySQL
深入理解CSS 中 transform matrix矩阵变换问题
2021/08/30 HTML / CSS
MySQL实战记录之如何快速定位慢SQL
2022/03/23 MySQL
世界无敌的ICOM IC-R9500宽频接收机
2022/03/25 无线电