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 相关文章推荐
Web 前端设计模式--Dom重构 提高显示性能
Oct 22 Javascript
基于jquery的防止大图片撑破页面的实现代码(立即缩放)
Oct 24 Javascript
基于KMP算法JavaScript的实现方法分析
May 03 Javascript
javascript数据结构之双链表插入排序实例详解
Nov 25 Javascript
JavaScript实现时间表动态效果
Jul 15 Javascript
JavaScript取得gridview中获取checkbox选中的值
Jul 24 Javascript
关于Vue在ie10下空白页的debug小结
May 02 Javascript
Javascript实现购物车功能的详细代码
May 08 Javascript
微信小程序MUI侧滑导航菜单示例(Popup弹出式,左侧不动,右侧滑动)
Jan 23 Javascript
微信小程序实现人脸识别登陆的示例代码
Apr 02 Javascript
vue使用vuex实现首页导航切换不同路由的方法
May 08 Javascript
vue+vant-UI框架实现购物车的复选框全选和反选功能
Nov 05 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读取XML值的代码(推荐)
2011/01/01 PHP
PHP+JQuery+Ajax实现分页方法详解
2016/08/06 PHP
获取URL地址中的文件名和参数的javascript代码
2009/09/02 Javascript
jQuery帮助之CSS尺寸(五)outerHeight、outerWidth
2009/11/14 Javascript
JavaScript的单例模式 (singleton in Javascript)
2010/06/11 Javascript
JS对img进行操作(换图片/切图/轮换/停止)
2013/04/17 Javascript
解析javascript系统错误:-1072896658的解决办法
2013/07/08 Javascript
JS获取当前网页大小以及屏幕分辨率等
2014/09/05 Javascript
JS+CSS实现弹出全屏灰黑色透明遮罩效果的方法
2014/12/20 Javascript
javascript面向对象之对象的深入理解
2015/01/13 Javascript
45个JavaScript编程注意事项、技巧大全
2015/02/11 Javascript
JavaScript与HTML的结合方法详解
2015/11/23 Javascript
基于jQuery实现带动画效果超炫酷的弹出对话框(附源码下载)
2016/02/22 Javascript
JS实现的抛物线运动效果示例
2018/01/30 Javascript
js中如何完美的解析数据
2018/03/18 Javascript
mapboxgl区划标签避让不遮盖实现的代码详解
2020/07/01 Javascript
Vue如何循环提取对象数组中的值
2020/11/18 Vue.js
使用Python脚本来控制Windows Azure的简单教程
2015/04/16 Python
python中global用法实例分析
2015/04/30 Python
Python实现句子翻译功能
2017/11/14 Python
python使用thrift教程的方法示例
2019/03/21 Python
三个python爬虫项目实例代码
2019/12/28 Python
浅析Python __name__ 是什么
2020/07/07 Python
使用OpenCV实现道路车辆计数的使用方法
2020/07/15 Python
Ubuntu 20.04安装Pycharm2020.2及锁定到任务栏的问题(小白级操作)
2020/10/29 Python
Python调用系统命令os.system()和os.popen()的实现
2020/12/31 Python
在python3.9下如何安装scrapy的方法
2021/02/03 Python
我们没有写servlet的构造方法,那么容器是怎么创建servlet的实例呢
2013/04/24 面试题
办加油卡单位介绍信
2014/01/09 职场文书
团队经理竞聘书
2014/03/31 职场文书
英文感谢信格式
2015/01/21 职场文书
入党转正申请报告
2015/05/15 职场文书
恰同学少年观后感
2015/06/08 职场文书
2016年安全月活动总结
2016/04/06 职场文书
node快速搭建后台的实现步骤
2022/02/18 NodeJs
JavaScript设计模式之原型模式详情
2022/06/21 Javascript