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 相关文章推荐
js报错 Object doesn't support this property or method的原因分析
Mar 31 Javascript
jquery图片切换插件
Mar 16 Javascript
Angular 根据 service 的状态更新 directive
Apr 03 Javascript
jQuery实现带延时功能的水平多级菜单效果【附demo源码下载】
Sep 21 Javascript
AngularJS入门示例之Hello World详解
Jan 04 Javascript
Bootstrap3多级下拉菜单
Feb 24 Javascript
详解webpack-dev-server使用方法
Sep 14 Javascript
JavaScript创建防篡改对象的方法分析
Dec 30 Javascript
微信小程序webview实现长按点击识别二维码功能示例
Jan 24 Javascript
vue增加强缓存和版本号的实现方法
May 01 Javascript
微信小程序JS加载esmap地图的实例详解
Sep 04 Javascript
通过实例解析chrome如何在mac环境中安装vue-devtools插件
Jul 10 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
global.php
2006/12/09 PHP
php面向对象全攻略 (十) final static const关键字的使用
2009/09/30 PHP
php生成不重复随机数、数组的4种方法分享
2015/03/30 PHP
PHP实现通过URL提取根域名
2016/03/31 PHP
PHP7+Nginx的配置与安装教程详解
2016/05/10 PHP
PHP实现图片批量打包下载功能
2017/03/01 PHP
PHP后台实现微信小程序登录
2018/08/03 PHP
JQuery控制div外点击隐藏而div内点击不会隐藏的方法
2015/01/13 Javascript
WordPress中利用AJAX异步获取评论用户头像的方法
2016/01/08 Javascript
D3.js实现折线图的方法详解
2016/09/21 Javascript
Jquery Easyui验证组件ValidateBox使用详解(20)
2016/12/18 Javascript
动态加载css方法实现和深入解析
2017/01/18 Javascript
vue.js之vue-cli脚手架的搭建详解
2017/05/05 Javascript
Vue.Draggable实现拖拽效果
2020/07/29 Javascript
关于axios如何全局注册浅析
2018/01/14 Javascript
jQuery 防止相同的事件快速重复触发方法
2018/02/08 jQuery
浅谈Vue 数据响应式原理
2018/05/07 Javascript
react项目实践之webpack-dev-serve
2018/09/14 Javascript
微信小程序车牌号码模拟键盘输入功能的实现代码
2018/11/11 Javascript
详解python 发送邮件实例代码
2016/12/22 Python
Python 遍历列表里面序号和值的方法(三种)
2017/02/17 Python
Sanic框架路由用法实例分析
2018/07/16 Python
基于python实现KNN分类算法
2020/04/23 Python
python turtle库画一个方格和圆实例
2019/06/27 Python
Python大数据之网络爬虫的post请求、get请求区别实例分析
2019/11/16 Python
tornado+celery的简单使用详解
2019/12/21 Python
Pytorch Tensor 输出为txt和mat格式方式
2020/01/03 Python
python 抓取知乎指定回答下视频的方法
2020/07/09 Python
世界第一冲浪品牌:O’Neill
2016/08/30 全球购物
美国电子产品折扣网站:Daily Steals
2017/05/20 全球购物
意大利奢华内衣制造商:Cosabella
2017/08/29 全球购物
优秀员工自荐信范文
2013/10/05 职场文书
生日庆典策划方案
2014/06/02 职场文书
机电一体化专业求职信
2014/07/22 职场文书
2014年学生工作总结
2014/11/20 职场文书
vue项目支付功能代码详解
2022/02/18 Vue.js