安装Node就很少说了,java
npm install sails -g//全局安装 sails new project-name//新建项目 cd project-name //进入刚才新建项目的目录 sails lift //运行项目,运行原理也是直接在项目目录路径下使用node app.js npm install sails-mysql --save //--save 把安装的模块写进package.json
到了这一步,环境算是搭建完成。node
在api目录下,有着controller、hooks、models、policies、responses和services几个目录mysql
controller目录下存放的就是页面与后台服务器通信的接口,若是对应的java,那么就是java里面的Action层或者使用Spring
MVC ,那么也是对应的Controller,里面存放的就是接口。git
models,数据模型层,也就是实体层,对应java里面的entity。es6
policies(策略),在controller以前执行,主要工做是session认证,若是session是认证经过了,那么就能够进入下一个策略或者若是是最后一个策略,那么就能够进入controller了,我的感受像是java里的过滤器或者分发器。sql
responses,自定义的响应。举个例子,通常从前台发出一个请求后,若是通过了服务器,那么都会给客户端返回一个结果,除了自己自带的响应方式,也能够采用自定义的响应,好比返回一个404页面,返回500页面或者返回字符串等等。数据库
services,业务逻辑处理层,采用es6的Module的语法编写。npm
在这层目录里面有,js,image,styles,templates,这个目录里面主要放的就是静态资源,没什么说的。json
这层里面有env和locales两层,而后和一些js。api
env中有一个development.js里面的注释是以下:
开发环境配置,这个文件夹里面包含了开发团队共享的一些配置,好比api的名称,数据库的密码,若是你在你的Sails应用中使用了版本控制器,这个文件也会提交到你的资源仓库里面,除非你在gitignore中添加了一个信息,代表这个文件是私有的或不公开的。
env中的production.js里的注释以下:
项目环境配置,与development相似,可是从注释中看到要多一些东西,好比配置端口的和日志的
这层里面主要放置的是grunt的任务,
这一层主要放置的是做为展现的前台页面,一种状况是使用node作单纯的后台服务器,不处理前台业务,而另一种状况是采用模块化的思想,对结构进行分层,达到MVC的合理实现,原本Sails就是一个MVC框架因此第一种状况仍是不太会出现。
总体流程:新建数据库 -> 新建表 -> 建实体 -> 在sails中搭建环境 -> 编码 -> 获得结果
建好mysql数据库,而后新建表,新建表有两种新建方式,一种是自动建表,另一种是手动建表。手动建表我就很少说了。
设计的主要文件是config里面的connections.js,里面存放的是连接数据库的配置,这里的配置不光只能配置这么一个连接,能够多个不一样或相同数据库,代码以下:
mySqlServer: { adapter: 'sails-mysql', host: 'localhost', port: 3306, user: 'root', password: 'root', database: 'myproject', charset:'utf8' }
而后下一个重要文件就是models.js里面的文件,里面存放的是数据库使用的那个连接,以上面的名字做为键值,代码以下:
connection: 'mySqlServer', migrate: 'alter'
connection :表示我是用的就是mySqlServer这个连接
migrate:alter修改,这意味这对这个数据在运行项目时时会根据你实体的设计修改数据中的表结构的。而safe就是要手动建表,那么这个时候你得把实体与数据库对应起来之不过有点麻烦,对于初学者来讲仍是把实体与数据库手动对应起来吗,由于以后还会有复杂的表间关系,好比说一对1、一对多、多对多等。
回到api层理的models里面,在里面新建好js文件,值得注意的是文件名称,这个名称直接关系到你以后的查询,删除等操做,我新建的operator的代码以下:
module.exports = { attributes:{ username:{ type:'string', required:true }, password:{ type:'string', required:true } } }
除了这两个字段,sails会自动给你在表里面新建三个字段,id,createdAt,updatedAt,新建好数据的表结构以下图所示:
执行代码在项目路径下进入CMD命令窗口
node app.js或者sails lift,执行完以后若是没有报错且新建好数据库那么就没什么问题了。
那么在这个阶段容易碰到的问题有那些呢:
Consistency violation: A model (`operator`) references a datastore which cannot be found (`otherSql`).
这句话的意思是,operator这个数据模型在otherSql这个连接中找不到。因此遇到这个状况就检查是否是连接配的有问题或者Mysql的服务已关闭。
controller配置里面的是交互的接口,代码以下:
module.exports = { findOne:function (req,res) { var id = req.param('id'); if(id){ console.log(id); operator.find(id, function operatorFound(err, entity) { res.send(entity,200); }); }else{ console.log("是啊比"); res.send("失败",500); } } };
一个简单的查询就这么完成了,写完成以后就是验证编写的正确性了。在浏览器输入url:
http://localhost:1337/user/findOne?id=1
查出来的结果如图所示:
这条数据手动添加的,这样一个很简单的demo算完成了。
若是想要修改项目访问端口,可在local.js里面添加:port:端口号,项目访问默认路径是user,想要修改的话,能够在route里面修改进行访问。
代码以下:
'/findOne':{ controller:'UserController', action:'findOne' }
起哄controller对应的就是controller的文件名(不添加后缀),action:对应的就是里面的方法名。