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实现简单的时钟实例代码
Nov 23 Javascript
js确认删除对话框效果的示例代码
Feb 20 Javascript
详解Webwork中Action 调用的方法
Feb 02 Javascript
使用JS代码实现点击按钮下载文件
Nov 12 Javascript
使用UrlConnection实现后台模拟http请求的简单实例
Jan 04 Javascript
Javascript中类式继承和原型式继承的实现方法和区别之处
Apr 25 Javascript
Angularjs中date过滤器失效的问题及解决方法
Jul 06 Javascript
JS实现判断图片是否加载完成的方法分析
Jul 31 Javascript
JavaScrip数组去重操作实例小结
Jun 20 Javascript
从零撸一个pc端vue的ui组件库( 计数器组件 )
Aug 08 Javascript
Vue 实现简易多行滚动"弹幕"效果
Jan 02 Javascript
Javascript摸拟自由落体与上抛运动原理与实现方法详解
Apr 08 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自动反斜杠的函数代码
2010/01/05 PHP
PHP基础学习之流程控制的实现分析
2013/04/28 PHP
ThinkPHP模板中数组循环实例
2014/10/30 PHP
php计算给定时间之前的函数用法实例
2015/04/03 PHP
PHP获取数组的键与值方法小结
2015/06/13 PHP
php+redis在实际项目中HTTP 500: Internal Server Error故障排除
2017/02/05 PHP
Ubuntu上安装yaf扩展的方法
2018/01/29 PHP
使用js获取QueryString的方法小结
2010/02/28 Javascript
拖动table标题实现改变td的大小(css+js代码)
2013/04/16 Javascript
jquery设置按钮停顿3秒不可用
2014/03/07 Javascript
JS小游戏之象棋暗棋源码详解
2014/09/25 Javascript
由简入繁实现Jquery树状结构的方法(推荐)
2016/06/10 Javascript
js操作DOM--添加、删除节点的简单实例
2016/07/08 Javascript
js 能实现监听F5页面刷新子iframe 而父页面不刷新的方法
2016/11/09 Javascript
Servlet实现文件上传,可多文件上传示例
2016/12/05 Javascript
javascript html5轻松实现拖动功能
2017/03/01 Javascript
利用node.js写一个爬取知乎妹纸图的小爬虫
2017/05/03 Javascript
Vue-Router模式和钩子的用法
2018/02/28 Javascript
Vue中Table组件Select的勾选和取消勾选事件详解
2019/03/19 Javascript
vue+element实现表格新增、编辑、删除功能
2019/05/28 Javascript
微信小程序实现消息框弹出动画
2020/04/18 Javascript
微信浏览器左上角返回按钮监听的实现
2020/03/04 Javascript
Jquery Fade用法详解
2020/11/06 jQuery
python计算最小优先级队列代码分享
2013/12/18 Python
python中numpy包使用教程之数组和相关操作详解
2017/07/30 Python
浅析Python函数式编程
2018/10/06 Python
Python3之字节串bytes与字节数组bytearray的使用详解
2019/08/27 Python
详解Python中pyautogui库的最全使用方法
2020/04/01 Python
TensorFlow固化模型的实现操作
2020/05/26 Python
Web时代变迁及html5与html4的区别
2016/01/06 HTML / CSS
白血病捐款倡议书
2014/05/14 职场文书
巴西世界杯32强口号
2014/06/05 职场文书
小学优秀教师先进事迹材料
2014/12/16 职场文书
2015年银行客户经理工作总结
2015/04/01 职场文书
JavaScript阻止事件冒泡的方法
2021/12/06 Javascript
Java无向树分析 实现最小高度树
2022/04/09 Javascript