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 相关文章推荐
JQERY limittext 插件0.2版(长内容限制显示)
Aug 27 Javascript
js/jQuery简单实现选项卡功能
Jan 02 Javascript
JS基于VML技术实现的五角星礼花效果代码
Oct 26 Javascript
jQuery prototype冲突的2种解决方法(附demo示例下载)
Jan 21 Javascript
jQuery实现的自适应焦点图效果完整实例
Aug 24 Javascript
Vue.js每天必学之组件与组件间的通信
Sep 08 Javascript
JavaScript prototype属性详解
Oct 25 Javascript
javascript函数的四种调用模式
Jan 08 Javascript
详解vue-cli本地环境API代理设置和解决跨域
Sep 05 Javascript
jQuery 实现左右两侧菜单添加、移除功能
Jan 02 jQuery
vue 解决数组赋值无法渲染在页面的问题
Oct 28 Javascript
vue3.0封装轮播图组件的步骤
Mar 04 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
Nginx+php配置文件及原理解析
2020/12/09 PHP
jQuery Ajax文件上传(php)
2009/06/16 Javascript
jQueryUI如何自定义组件实现代码
2010/11/14 Javascript
AngularJS入门教程之学习环境搭建
2014/12/06 Javascript
JavaScript插件化开发教程 (二)
2015/01/27 Javascript
javascript实现回到顶部特效
2015/05/06 Javascript
js实现input密码框提示信息的方法(附html5实现方法)
2016/01/14 Javascript
jquery单击事件和双击事件冲突解决方案
2016/03/02 Javascript
JavaScript重载函数实例剖析
2016/05/13 Javascript
内容滑动切换效果jquery.hwSlide.js插件封装
2016/07/07 Javascript
js实现鼠标拖动功能
2017/03/20 Javascript
微信小程序 中wx.chooseAddress(OBJECT)实例详解
2017/03/31 Javascript
jquery append与appendTo方法比较
2017/05/24 jQuery
详解vuex的简单使用
2018/03/12 Javascript
使用node.js实现微信小程序实时聊天功能
2018/08/13 Javascript
Vue——解决报错 Computed property "****" was assigned to but it has no setter.
2020/12/19 Vue.js
在Django框架中编写Context处理器的方法
2015/07/20 Python
在Django中管理Users和Permissions以及Groups的方法
2015/07/23 Python
Python中方法链的使用方法
2016/02/23 Python
Python学习小技巧之列表项的拼接
2017/05/20 Python
django 开发忘记密码通过邮箱找回功能示例
2018/04/17 Python
Python获取数据库数据并保存在excel表格中的方法
2019/06/12 Python
Flask中endpoint的理解(小结)
2019/12/11 Python
如何从csv文件构建Tensorflow的数据集
2020/09/21 Python
Python爬取你好李焕英豆瓣短评生成词云的示例代码
2021/02/24 Python
html5通过postMessage进行跨域通信的方法
2017/12/04 HTML / CSS
HEMA法国:荷兰原创设计
2019/02/21 全球购物
Skyscanner香港:机票比价, 平机票和廉价航空机票预订
2020/02/07 全球购物
通信工程专业毕业生推荐信
2013/12/25 职场文书
建筑工程专业学生的自我评价
2013/12/25 职场文书
教师一岗双责责任书
2014/04/16 职场文书
2014年国庆标语
2014/06/30 职场文书
大学生入党积极分子自我评价
2014/09/20 职场文书
2016秋季运动会开幕词
2016/03/04 职场文书
查看nginx配置文件路径和资源文件路径的方法
2021/03/31 Servers
javascript的var与let,const之间的区别详解
2022/02/18 Javascript