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 相关文章推荐
javascript 用原型继承来实现对象系统
Mar 22 Javascript
javascript中类的定义及其方式(《javascript高级程序设计》学习笔记)
Jul 04 Javascript
ScrollDown的基本操作示例
Jun 09 Javascript
html文档中的location对象属性理解及常见的用法
Aug 13 Javascript
jQuery实现ajax调用WCF服务的方法(附带demo下载)
Dec 04 Javascript
JS动态计算移动端rem的解决方案
Oct 14 Javascript
JS中Swiper的使用和轮播图效果
Aug 11 Javascript
React/Redux应用使用Async/Await的方法
Nov 16 Javascript
Thinkjs3新手入门之如何使用静态资源目录
Dec 06 Javascript
vue基础之data存储数据及v-for循环用法示例
Mar 08 Javascript
利用Vue-draggable组件实现Vue项目中表格内容的拖拽排序
Jun 07 Javascript
vue3.0生命周期的示例代码
Sep 24 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 gbk环境下json_dencode传送来的汉字
2012/11/13 PHP
PHP中file_get_contents高?用法实例
2014/09/24 PHP
php判断类是否存在函数class_exists用法分析
2014/11/14 PHP
ThinkPHP数据操作方法总结
2015/09/28 PHP
PHP 进程池与轮询调度算法实现多任务的示例代码
2019/11/26 PHP
TP5多入口设置实例讲解
2020/12/15 PHP
JQuery自定义事件的应用 JQuery最佳实践
2010/08/01 Javascript
js常用代码段整理
2011/11/30 Javascript
JavaScript定时器和优化的取消定时器方法
2015/07/03 Javascript
JavaScript函数中关于valueOf和toString的理解
2016/06/14 Javascript
js添加千分位的实现代码(超简单)
2016/08/01 Javascript
js设置和获取自定义属性的方法
2016/10/20 Javascript
对Angular.js Controller如何进行单元测试
2016/10/25 Javascript
JavaScript正则表达式替换字符串中图片地址(img src)的方法
2017/01/13 Javascript
JS实现二叉查找树的建立以及一些遍历方法实现
2017/04/17 Javascript
js中的数组对象排序分析
2018/12/11 Javascript
qrcode生成二维码微信长按无法识别问题的解决
2019/04/04 Javascript
Vue.js仿Select下拉框效果
2020/02/18 Javascript
package.json各个属性说明详解
2020/03/11 Javascript
Python中Class类用法实例分析
2015/11/12 Python
Python实现OpenCV的安装与使用示例
2018/03/30 Python
python实现对求解最长回文子串的动态规划算法
2018/06/02 Python
ActiveMQ:使用Python访问ActiveMQ的方法
2019/01/30 Python
Django ORM 自定义 char 类型字段解析
2019/08/09 Python
python dumps和loads区别详解
2020/02/04 Python
Python实现结构体代码实例
2020/02/10 Python
Python编程快速上手——强口令检测算法案例分析
2020/02/29 Python
CSS3制作圆角图片和椭圆形图片
2016/07/08 HTML / CSS
详解CSS3阴影 box-shadow的使用和技巧总结
2016/12/03 HTML / CSS
HTML5实现可缩放时钟代码
2017/08/28 HTML / CSS
软件工程师面试题
2012/06/25 面试题
物流管理毕业生自荐信
2013/10/24 职场文书
社区母亲节活动方案
2014/03/05 职场文书
财务经理岗位职责范本
2015/04/08 职场文书
Canvas三种动态画圆实现方法说明(小结)
2021/04/16 Javascript
vue.js 使用原生js实现轮播图
2022/04/26 Vue.js