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 学习入门篇附实例代码
Mar 16 Javascript
javascript 当前日期转化为中文的实现代码
May 13 Javascript
使用jquery插件实现图片延迟加载技术详细说明
Mar 12 Javascript
json的前台操作和后台操作实现代码
Jan 20 Javascript
jquery对象和DOM对象的区别介绍
Aug 09 Javascript
[原创]javascript typeof id==='string'?document.getElementById(id):id解释
Nov 02 Javascript
浅析js的模块化编写 require.js
Dec 07 Javascript
基于Vue渲染与插件的加载顺序的问题详解
Mar 05 Javascript
Vue中的v-for指令不起效果的解决方法
Sep 27 Javascript
vue之a-table中实现清空选中的数据
Nov 07 Javascript
vue实现图书管理系统
Dec 29 Vue.js
vue组件是如何解析及渲染的?
Jan 13 Vue.js
了不起的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文件
2007/01/04 PHP
采集邮箱的php代码(抓取网页中的邮箱地址)
2012/07/17 PHP
joomla数据库操作示例代码
2016/01/06 PHP
PHP第三方登录―QQ登录实现方法
2017/02/06 PHP
Js中setTimeout()和setInterval() 何时被调用执行的用法
2013/04/12 Javascript
jquery获取对象的方法足以应付常见的各种类型的对象
2014/05/14 Javascript
node.js不得不说的12点内容
2014/07/14 Javascript
node.js中的url.format方法使用说明
2014/12/10 Javascript
javascript使用switch case实现动态改变超级链接文字及地址
2014/12/16 Javascript
JavaScript弹出新窗口并控制窗口移动到指定位置的方法
2015/04/06 Javascript
jQuery插件ajaxFileUpload实现异步上传文件效果
2015/04/14 Javascript
jQuery插件bgStretcher.js实现全屏背景特效
2015/06/05 Javascript
使用Jasmine和Karma对AngularJS页面程序进行测试
2016/03/05 Javascript
javascript类型系统——undefined和null全面了解
2016/07/13 Javascript
原生js实现tab选项卡切换
2020/03/23 Javascript
Vue.js实现按钮的动态绑定效果及实现代码
2017/08/21 Javascript
解决Vue开发中对话框被遮罩层挡住的问题
2018/11/26 Javascript
微信小程序自定义带价格显示日历效果
2018/12/29 Javascript
解决vue自定义全局消息框组件问题
2019/11/22 Javascript
[51:15]2014 DOTA2国际邀请赛中国区预选赛 Orenda VS LGD-GAMING
2014/05/22 DOTA
通过C++学习Python
2015/01/20 Python
python调用系统ffmpeg实现视频截图、http发送
2018/03/06 Python
python for 循环获取index索引的方法
2019/02/01 Python
对python中的float除法和整除法的实例详解
2019/07/20 Python
详解Django CAS 解决方案
2019/10/30 Python
python 监测内存和cpu的使用率实例
2019/11/28 Python
Python 安装 virturalenv 虚拟环境的教程详解
2020/02/21 Python
美国手工艺品市场的领导者:Annie’s
2019/04/04 全球购物
荷兰浴室和卫浴网上商店:Badkamerxxl.nl
2020/10/06 全球购物
关爱女孩行动实施方案
2014/03/13 职场文书
人事任命书怎么写
2014/06/05 职场文书
社会实践活动报告
2015/02/05 职场文书
2015年小学图书室工作总结
2015/05/18 职场文书
读《工匠精神》有感:热爱工作,精益求精
2019/12/28 职场文书
GoFrame框架数据校验之校验结果Error接口对象
2022/06/21 Golang
使用opencv-python如何打开USB或者笔记本前置摄像头
2022/06/21 Python