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
解决extjs grid 不随窗口大小自适应的改变问题
Jan 26 Javascript
JS实现跟随鼠标闪烁转动色块的方法
Feb 26 Javascript
jQuery下拉友情链接美化效果代码分享
Aug 26 Javascript
jquery实现鼠标点击后展开列表内容的导航栏效果
Sep 14 Javascript
jquery中ajax处理跨域的三大方式
Jan 05 Javascript
Bootstrap使用基础教程详解
Sep 05 Javascript
javascript监听页面刷新和页面关闭事件方法详解
Jan 09 Javascript
使用grunt合并压缩js和css文件的方法
Mar 02 Javascript
浅析Vue 生命周期
Jun 21 Javascript
抖音上用记事本编写爱心小程序教程
Apr 17 Javascript
解决Vue中 父子传值 数据丢失问题
Aug 27 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
BBS(php & mysql)完整版(一)
2006/10/09 PHP
php中随机显示图片的函数代码
2011/06/23 PHP
php数组函数序列之array_key_exists() - 查找数组键名是否存在
2011/10/29 PHP
PHP实现通过URL提取根域名
2016/03/31 PHP
php查询内存信息操作示例
2019/05/09 PHP
网页开发中的容易忽略的问题 javascript HTML中的table
2009/04/15 Javascript
Javascript学习笔记6 prototype的提出
2010/01/11 Javascript
Javascript面向对象设计一 工厂模式
2011/12/20 Javascript
一个封装js代码-----展开收起效果示例
2013/07/03 Javascript
javascript实现仿IE顶部的可关闭警告条
2015/05/05 Javascript
JS中Json数据的处理和解析JSON数据的方法详解
2016/06/29 Javascript
浅析js的模块化编写 require.js
2016/12/07 Javascript
Vue.js计算属性computed与watch(5)
2016/12/09 Javascript
jQuery中Datatables增加跳转到指定页功能
2017/02/08 Javascript
详解基于 axios 的 Vue 项目 http 请求优化
2017/09/04 Javascript
深入理解ES6 Promise 扩展always方法
2017/09/26 Javascript
基于 Vue.js 2.0 酷炫自适应背景视频登录页面实现方式
2018/01/17 Javascript
vue component 中引入less文件报错 Module build failed
2019/04/17 Javascript
基于javascript实现贪吃蛇小游戏
2019/11/25 Javascript
javascript设计模式 ? 桥接模式原理与应用实例分析
2020/04/13 Javascript
微信小程序学习总结(一)项目创建与目录结构分析
2020/06/04 Javascript
微信小程序实现星星评分效果
2020/11/01 Javascript
微信小程序实现简单购物车功能
2020/12/30 Javascript
[05:49]2014DOTA2TI4正赛第二日综述 昔日冠军纷纷落马 VG LGD占尽先机
2014/07/20 DOTA
python使用PIL缩放网络图片并保存的方法
2015/04/24 Python
python中nan与inf转为特定数字方法示例
2017/05/11 Python
详解python之多进程和进程池(Processing库)
2017/06/09 Python
Python通过matplotlib画双层饼图及环形图简单示例
2017/12/15 Python
python实现基于朴素贝叶斯的垃圾分类算法
2019/07/09 Python
python实现学生信息管理系统(精简版)
2020/11/27 Python
Clearly新西兰:购买眼镜、太阳镜和隐形眼镜
2018/04/26 全球购物
西班牙电子产品购物网站:Electronicamente
2018/07/26 全球购物
大学四年的个人自我评价
2014/01/14 职场文书
大学生翘课检讨书范文
2014/10/06 职场文书
投资申请报告
2015/05/19 职场文书
Ajax是什么?Ajax高级用法之Axios技术
2021/04/21 Javascript