Waterline 之所以可以使用一样的代码来操作多种数据库,奥妙在于其适配器。在进行配置的时候,需要设置两方面的内容,一是具体使用哪些适配器,二是建立数据库连接的时候,使用哪个适配器。下面是使用 MongoDB/Mysql 的适配器创建一个数据库连接的配置
MongoDB:
Mysql:
连接字符串说明:数据库类型://用户名:密码@数据库地址/数据库名
执行命令安装waterline:
配置相当简单方便,类似于 Mongoose 中的 Schema。但要注意,指定属性的字段时,使用的是一个字符串值,而不是 JavaScript 中的具体类型,目前支持的数据类型有 <code>string</code> / <code>text</code> / <code>integer</code> / <code>float</code> / <code>date</code> /<code>time</code> / <code>datetime</code> / <code>boolean</code> / <code>binary</code> / <code>array</code> / <code>json</code>,这个范围要比 JavaScript 的类型范围大。
除了这四个基本配置,还可以配置校验器,添加自定义的方法,设置生命周期回调方法等。
注意:
1.如果没有定义主键,那么waterline会为你默认创建名为id的主键,类型是整型自增长
2.waterline自动创建表时会为你添加 createdAt、updatedAt两个字段,类型为datetime,分别在insert和update操作更新字段代表的是记录的创建时间和更新时间
<code> 3.如果不想自动创建列createdAt、updatedAt,那么请设置</code>autoCreatedAt,autoUpdatedAt的值为false,如下图
4.waterline会自动根据定义的model创建表,但是如果你已经创建好了表,但是与model定义有所区别,比如字段名不一样,那么一定要注意了,请按照下图设置,否则waterline将会删除已经存在表且根据model重新创建,以前的数据就完蛋了
<code> </code>
校验器是在创建数据集合的时候指定给具体的属性的
更多设置请查看:https://www.npmjs.com/package/waterline
可以通过waterline,来实现在进行特定操作的时候,调用自定义的方法。,在 <code>create</code> / <code>update</code> / <code>destory</code>时,均有多种回调。直接提供对应的方法名,分别是:
创建时:<code>beforeValidate</code> / <code>afterValidate</code> / <code>beforeCreate</code> / <code>afterCreate</code>
更新时:<code>beforeValidate</code> / <code>afterValidate</code> / <code>beforeUpdate</code> / <code>afterUpdate</code>
删除时:<code>beforeDestroy</code> / <code>afterDestroy</code>
这些方法,需要在初始化数据集合的时候进行定义。
waterline有以下查询方法
1.查询 name 等于 foo 的记录
2.多条件查询 查询 name 等于 water 并且 state 等于new mexico 的记录
下面的修饰符可用于构建查询时使用。
<code>'<'</code> / <code>'小于'</code>
<code>'<='</code> / <code>'小于等于'</code>
<code>'>'</code> / <code>'大于'</code>
<code>'>='</code> / <code>'大于等于'</code>
<code>'!'</code> / <code>'非'</code>
<code>'like'/'模糊匹配'</code>
<code>'contains'/'包含'</code>
<code>'startsWith'/'以某字符开头'</code>
<code>'endsWith'/'以某字符结尾'</code>
3.分页查询
4.新增记录
5.更新记录
6.删除记录
Promises
这里使用的数据库是mysql创建一个数据库名为:IcbcGold
1.新建一个js文件:waterline.js,代码如下:
2.新建文件 index.js
本文转自 zddnd 51CTO博客,原文链接:http://blog.51cto.com/13013666/1949242