Oracle怎用Sails?

前言

着手Node.js半年,从用Express开发好的博客及用Sails开发企业项目,深深为Sails震撼了。Sails是Balderdash团队的制品,快速的档次构建、优秀之框架结构还有为数不少底扩大,让自身出种植近之发。在Koa流行之前,个人认为Sails的用户量还是颇可观之。今天,我思写一描写Sails那些被自身打动的地方,顺便理顺一下Sails的架。

目录

  • 如出一辙步搭建项目
  • 列架构
  • ORM
  • MVC的实现
  • 路由
  • 安全
  • 日志
  • 单元测试
  • WebSocket

相同步搭建项目

在安装了Node.js 和
Sails的条件下,只需要平等久命令,就可知多建筑一个具有完全架构的种类,尽管就可怜简短,我或者觉得出必不可少说一下。

当都设置了Node.js和npm的前提下,首先你待全局下安装Sails
$ sudo npm install sails -g

说不上在一个拖欠路径下,新建一个路
$ sails new newApp

最终,只需要去项目路线,把品种运作起来
$ cd testProject
$ sails lift

访问 http://localhost:1337就会看到一个初的路

new app

项目架构

.
├── api
│   ├── controllers
│   ├── models
│   ├── policies
│   ├── responses
│   └── services
├── views
├── assets
├── config
├── tasks
├── node_modules
├── package.json
├── Gruntfile.js
├── README.md
└── app.js

api/

api 目录下是您要是构建以之主干所在,常说的MVC的计划布局就反映于这边
api/controllers
:控制层,该层是Http请求的进口。Sails官方建议该层只处理要的转折和页面的渲染,具体的逻辑实现应有付出Service层。
api/models:模型层,在Sails中,对于Model采用的凡充血模型,除了可在模型中定于属性之外,还可定义包含逻辑处理的函数。在Sails中,所有Model都可以全局性访问。
api/policies:过滤层,该层在Controller层之前对Http请求做拍卖,在马上无异重叠中,可以定于一些条条框框来过滤Http请求,比如身份证明什么的。
api/responses:http响应的方法都加大这里,例如服务器错误、请求错误、404不当等,定义在responses文件夹里面的点子,都见面赋值到controller层的req对象被。
api/services:服务层,该层包含逻辑处理的章程,在Sails中,所有Service都好全局性访问。

views/

来看图层,存放视图模版文件之地方,Sails默认是供ejs模版引擎的,如果你愿意,你可换成jade、handlebars或者其它你欣赏的沙盘引擎。

assets/

资源文件夹,在Sails启动之时节,会启动某一个Grunt任务,把assets文件夹里的始末或回落或编译或复制到根本目录下的.tmp目录,这是前者可以一直通过路由访问的资源,HTML、JS、CSS以及图片等静态资源还在这里了。

config/

布文件夹,在Sails启动的当儿,会加载该文件夹里之公文,并赋值在大局对象sails.config面临,所以能够在旁一个地方都能就此到。在就此Sails开发,会经常和此文件夹里之文书打交道,从config的重组异常爱懂Sails都提供哪方的法力。

tasks/

Sails自带的类自动化工具是Grunt,而Grunt的安排和职责注册还位于这文件夹里了。这里早已提供了寻常会为此到的CSS编译、JS压缩、文件合并,更改检测等等任务,当然如果无好得之,还能够扩大。

app.js

Sails的启动文件,无论是$ sails lift一声令下或者$ npm start命令还见面运行该文件。

ORM

支出了Sails的组织Balderdash,还出了同样效ORM框架:Waterline。
Waterline在Sails主要的舞台是在/api/models目里,在这里定义的型文件,在Sails启动之早晚,都使路过Waterline的洗礼。
Waterline 是通过Adapter关联数据库的,不同的Adapter关联不同的数据库。
Waterline 能适配绝对有数据库,大致分类两好像,一好像是官组织开发的
Adapter适配的,一像样是民间开发者开发之Adapter适配的:
合法支持的:

  • PostgreSQL
  • MySQL
  • MongoDB
  • Redis
  • Disk
  • Memory

民间开发之:

  • SQLServer
  • OrientDB
  • Oracle
  • Cassandra

关于Waterline的再度多信息可关注:
github:waterline
github:waterline-docs

MVC的实现

于即时等同段我怀念不仅仅要讨论到Model层、View层和Controller层,我觉得还有必要谈到Service层、和Policy层。

Model层

型文件定义及/api/models未遭,由Waterline驱动,所有model都能够全局看。Sails提供命令执行创建model的授命:$ sails generate model MODEL_NAME

View层

实现在/views遭遇,除了默认提供的ejs模版引擎之外,还能够更换成jade、handlebars等模版引擎

Controller层

/api/controller目里,Sails中提供创建controller的下令:$ sails generate controller CONTROLLER_NAME。Sails也供同时创建model和相应的Controller的通令:$ sails generate api API_NAME

Service层

/api/services目录里,存放于定义之劳务,所有service都能够全局看,Sails官方的提议是拿逻辑处理还位居该层中,Controller层只开路由的分发及轻逻辑的处理。

Policy层

/api/policies目里,存放于定义之过滤器。该层是一模一样长条告在到达Controller之前因需要过滤请求的中间层。在/api/policies目录中定义之公文,还亟需以config/policies.js文件被呢要求下至某一样过滤器的Action配置。

路由

Sails中而知道路由,首先使记得这名词blueprint,中文翻译为:蓝图。我非理解官方是否说了为什么要因此个单词,但以自家之知道,Sails的blueprint是肩负指挥每一样条客户端请求应该分配至服务器端的哪位Action去,所以给蓝图吧。
blueprint主要分为三种:RESTful routesShortcut routesAction routes

RESTful routes

当路径诸如:/:modelIdentity 或者
/:modelIdentity/:id的时候,blueprint会根据HTTP的动作(GET、POST、DELETE、PUT等)来分配到相应的Controller下相应的Action来处理。例如一个POST请求/user会晤创造一个用户,一个DELETE请求/user/123会删除id为123的用户。

Shortcut routes

这种路由于第一是便宜开发,请求的参数可以一直写在求路径中,例如/user/create?name=joe会晤创一个初的用户,/user/update/1?name=mike会更新id啊1的用户之名字。shortcut
routes在开发环境非常便宜,但是于养条件下用关闭。

Action routes

这种路由会自动的啊Controller层的各一个Action创建一个路由,例如你的Controller层有一个FooController.js,里面来一个Actionbar,那么要/foo/bar不怕会见分配至barAction。

自然Sails也会见提供从定义的路由,用户可于config/routes.jsconfig/polices.js立有限独布局文件中选择关闭或打开blueprint提供的路由,和定义自己之路由。

安全

假使确保产品之安全性,要本着几种植普遍的抨击和安政策了如指掌,诸如CORS、CSRF、DDOS、XSS等。Sails对于大规模的安全策略都来提供支持,且仅待经过有关的部署文件就可操纵安全策略的等。深入探讨Web的安全策略,并无以本文的局面内,日后我会因为这为题写一篇稿子聊聊Web的安。
纪念使询问又多Sails的安全策略可以看看这里:sails:
security

日志

Sails提供了一个大局对象sails.log于是来拍卖日志信息的出口,日志是劈level的,在config/log.js面临安排日志输出的level,而level的图看下表:

Priority level Log fns visible
0 silent N/A
1 error .error()
2 warn .warn(), .error()
3 debug .debug(), .warn(), .error()
4 info .info(), .debug(), .warn(), .error()
5 verbose .verbose(), .info(), .debug(), .warn(), .error()
6 silly .silly(), .verbose(), .info(), .debug(), .warn(), .error()

Sails的日记管理默认是info层的,既会输出.info(), .debug(), .warn(),
.error()的音。

单元测试

Sails使用了mocha进行单元测试,在新建Sails项目之当儿,没有开创单元测试的文本夹,需要自己手动构造单元测试目录,官方建议的目录是这样的:

.
├── api
├── assets
├── ...
├── test
│  ├── unit
│  │  ├── controllers
│  │  │  └── UsersController.test.js
│  │  ├── models
│  │  │  └── Users.test.js
│  │  └── ...
│  ├── fixtures
│  ├── ...
│  ├── bootstrap.test.js
│  └── mocha.opts
└── views

倘我于单元测试常用的构成是:mocha、should、supertest、
istanbul
个中should是提供断言,supertest是用来测试Controller层的时节伪造http请求的,而istanbul则是提供测试代码覆盖率的。
有关怎么在Sails中编测试代码,可以参考
sails:testing

WebSocket

于发出就是时性通讯需求的Web应用,我们会就此Socket,Sails也为当下方面提供了支撑。在客户端提供js文件:sails.io.js,而当劳务器端提供全局对象:sails.sockets。通过就有限单目标,就好开展客户端以及劳务器端即时性通讯的付出了。
Sails默认会启动WebSocket功能,在客户端访问服务器端的上,会自动品在同域Oracle名下连接socket。
值得注意的是,这样见面针对AngularJS、EmberJS等前端MVVC开发有有阻碍。
遵循进行AngularJS开发的时刻,我们当http://localhost:9000跑AngularJS项目,而服务器端却飞在http://localhost:1337
当访问http://localhost:9000的时候,sails.io.js会面尝试让当下路线下开展socket连接,也即是http://localhost:9000,这时会错,因为服务器是走在http://localhost:1337的。
每当开之时候如果化解这样的题目之时节,我们惟有待以AngularJS这边引入sails.io.js然后定义连接路就是推行了:

<script src="scripts/lib/sails.io.js"></script>
<script>io.sails.url = "http://localhost:1337";</script>

结语

可以说Sails涵盖了Web开发中见面遇上的绝大部分需与问题,如果深入研讨Sails的言语,是受益匪浅的。


如若本文对君有因此
请求不要吝啬你们的Follow与Start
当下会大大支持我们继承写

「Github」
MZMonster
:@MZMonster
JC_Huang
:@JerryC8080

相关文章