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 实现返回顶部功能
Nov 17 Javascript
javascript匿名函数实例分析
Nov 18 Javascript
JS版元素周期表实现方法
Aug 05 Javascript
Javascript之Math对象详解
Jun 07 Javascript
关于Function中的bind()示例详解
Dec 02 Javascript
JS触摸事件、手势事件详解
May 04 Javascript
使用ionic(选项卡栏tab) icon(图标) ionic上拉菜单(ActionSheet) 实现通讯录界面切换实例代码
Oct 20 Javascript
mui上拉加载更多下拉刷新数据的封装过程
Nov 03 Javascript
常用的9个JavaScript图表库详解
Dec 19 Javascript
angular写一个列表的选择全选交互组件的示例
Jan 22 Javascript
vue实现从外部修改组件内部的变量的值
Jul 30 Javascript
vue 实现element-ui中的加载中状态
Nov 11 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 curl获取301或302转向的网址问题的解决方法
2011/06/02 PHP
php dirname(__FILE__) 获取当前文件的绝对路径
2011/06/28 PHP
json的键名为数字时的调用方式(示例代码)
2013/11/15 PHP
PHP接收json 并将接收数据插入数据库的实现代码
2015/12/01 PHP
js的正则test,match,exec详细解析
2014/01/29 Javascript
在easyUI开发中,出现jquery.easyui.min.js函数库问题的解决办法
2015/09/11 Javascript
jQuery div拖拽用法实例
2016/01/14 Javascript
JavaScript数据类型学习笔记分享
2016/09/01 Javascript
Bootstrap3 多选和单选框(checkbox)
2016/12/29 Javascript
详解vue.js 开发环境搭建最简单攻略
2017/06/12 Javascript
Angular2.js实现表单验证详解
2017/06/23 Javascript
在Vue项目中引入腾讯验证码服务的教程
2018/04/03 Javascript
D3.js实现拓扑图的示例代码
2018/06/30 Javascript
详解如何在vue-cli中使用vuex
2018/08/07 Javascript
深入学习JavaScript 高阶函数
2019/06/11 Javascript
Typescript的三种运行方式(小结)
2019/09/18 Javascript
js实现AI五子棋人机大战
2020/05/28 Javascript
[50:27]OG vs LGD 2018国际邀请赛淘汰赛BO3 第一场 8.26
2018/08/30 DOTA
Python版微信红包分配算法
2015/05/04 Python
用matplotlib画等高线图详解
2017/12/14 Python
Python 运行.py文件和交互式运行代码的区别详解
2019/07/02 Python
python hough变换检测直线的实现方法
2019/07/12 Python
python安装第三方库如xlrd的方法
2020/10/31 Python
html5 迷宫游戏(碰撞检测)实例一
2013/07/25 HTML / CSS
美国婚礼礼品网站:MyWeddingFavors
2018/09/26 全球购物
请写一个C函数,若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1
2015/07/16 面试题
医学院学生求职简历的自我评价
2013/10/24 职场文书
高一政治教学反思
2014/01/28 职场文书
酒店保安员岗位职责
2014/01/31 职场文书
运动会通讯稿100字
2014/01/31 职场文书
护士自我评价
2014/02/01 职场文书
2014年平安夜寄语
2014/12/08 职场文书
小石潭记导游词
2015/02/03 职场文书
详解MySQL 联合查询优化机制
2021/05/10 MySQL
postman中form-data、x-www-form-urlencoded、raw、binary的区别介绍
2022/01/18 HTML / CSS
一文搞懂Java中的注解和反射
2022/06/21 Java/Android