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 相关文章推荐
图片自动更新(说明)
Oct 02 Javascript
ExtJS 2.0实用简明教程 之Border区域布局
Apr 29 Javascript
jQuery不间断滚动效果(模拟百度新闻支持文字/图片/垂直滚动)
Feb 05 Javascript
jQuery实现类似淘宝网图片放大效果的方法
Jul 08 Javascript
z-blog SyntaxHighlighter 长代码无法换行解决办法(基于jquery)
Nov 18 Javascript
基于jquery实现页面滚动到底自动加载数据的功能
Dec 19 Javascript
node使用Koa2搭建web项目的方法
Oct 17 Javascript
浅谈webpack下的AOP式无侵入注入
Nov 12 Javascript
jQuery实现常见的隐藏与展示列表效果示例
Jun 04 jQuery
如何在js代码中消灭for循环实例详解
Jul 29 Javascript
JS基于对象的链表实现与使用方法示例
Jan 31 Javascript
vue props 单项数据流实例分享
Feb 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
15种PHP Encoder的比较
2007/04/17 PHP
PHP和JAVA中的重载(overload)和覆盖(override) 介绍
2012/03/01 PHP
thinkphp在模型中自动完成session赋值示例代码
2014/09/09 PHP
php将从数据库中获得的数据转换成json格式并输出的方法
2018/08/21 PHP
js小技巧--自动隐藏红叉叉
2007/08/13 Javascript
ext 同步和异步示例代码
2009/09/18 Javascript
Javascript的数组与字典用法与遍历对象的属性技巧
2012/11/07 Javascript
javascript中数组的sort()方法的使用介绍
2013/12/18 Javascript
Area 区域实现post提交数据的js写法
2014/04/22 Javascript
JS实现关键字搜索时的相关下拉字段效果
2014/08/05 Javascript
jQuery选择器基础入门教程
2016/05/10 Javascript
js判断所有表单项不为空则提交表单的实现方法
2016/09/09 Javascript
node学习笔记之读写文件与开启第一个web服务器操作示例
2019/05/29 Javascript
vue 使用axios 数据请求第三方插件的使用教程详解
2019/07/05 Javascript
layui实现三级导航菜单
2019/07/26 Javascript
利用JS如何获取form表单数据
2019/12/19 Javascript
vue添加锚点,实现滚动页面时锚点添加相应的class操作
2020/08/10 Javascript
爬山算法简介和Python实现实例
2014/04/26 Python
Python 检查数组元素是否存在类似PHP isset()方法
2014/10/14 Python
django实现同一个ip十分钟内只能注册一次的实例
2017/11/03 Python
终端命令查看TensorFlow版本号及路径的方法
2018/06/13 Python
详解python3中zipfile模块用法
2018/06/18 Python
python保存数据到本地文件的方法
2018/06/23 Python
Python判断有效的数独算法示例
2019/02/23 Python
利用 PyCharm 实现本地代码和远端的实时同步功能
2020/03/23 Python
Keras设定GPU使用内存大小方式(Tensorflow backend)
2020/05/22 Python
Python3压缩和解压缩实现代码
2021/03/01 Python
HTML5新增元素如何兼容旧浏览器有哪些方法
2014/05/09 HTML / CSS
美国猫狗药物和用品网站:PetCareRx
2017/01/05 全球购物
澳大利亚在线家具店:Luxo Living
2019/03/24 全球购物
Expedia西班牙:预订酒店、机票、旅行和廉价度假套餐
2019/04/10 全球购物
大学三年的自我评价
2013/12/25 职场文书
意向书范本
2014/07/29 职场文书
银行委托书范本
2014/09/28 职场文书
教师考核表个人总结
2015/02/12 职场文书
学习心得体会
2019/06/20 职场文书