配置与使用
Sails提供并支持多种Models层的存储(https://sailsjs.com/documentation/concepts/extending-sails/adapters/available-adapters),
使用时需要在应用程序项目下安装对应的adapter并且在config/datastores或config/env/production.js下进行配置。
我们可能常用到的adapter可能包括mysql、mongodb和redis,下面我们依次进行安装和配置:
MySQL
安装sails-mysql
npm install sails-mysql --save
配置adapter
在config/datastores下进行配置:
module.exports.datastores = {default: {adapter: 'sails-mysql',//url: 'mysql://user:password@host:port/database',url: 'mysql://root:123456@127.0.0.1:3306/sails',},
};
Model
创建一个测试用的Model
sails generate api about
命令执行后,可以找到api/models/About.js文件,该文件就是About的Model,我们为其增添一些属性:
module.exports = {primaryKey: 'id',//defaults to idattributes: {id: {type: 'number',unique: true,autoIncrement: true,},content: {type: 'string',defaultsTo: 'hello sails',},createdAt: { type: 'number', autoCreatedAt: true, },updatedAt: { type: 'number', autoUpdatedAt: true, },},};
注:这里实际上不需要定义id、createdAt和updatedAt属性,Sails默认在config/models.js已经默认对所有模型给出了这三个属性的默认配置。
测试
启动应用并选择自动生成Model对用的表:
sails lift
Sails通过hook探索到Model的改变,提示你进一步的操作:
查看是否数据库中对用的表与表结构:
可以看到与我们的模型匹配一致。
MongoDB
安装sails-mongo
npm install sails-mongo --save
配置adapter
在config/datastores下进行配置:
module.exports.datastores = {default: {adapter: 'sails-mongo',//url: 'mongodb://user:password@host:port/database',url: 'mongodb://127.0.0.1:27017/sails',},
};
Model
id属性修改:
对id属性增加columnName:
id: {type: 'number',unique: true,autoIncrement: true,columnName: '_id',},
测试
启动应用并选择自动生成Model对用的Collection:
sails lift
由于MongoDB对于Collection操作时不会提前创建对应的Collection结构,因此,我们可以利用Blueprints中提供的create方法,创建一条对应的About数据:
http://127.0.0.1:1337/about/create?content=foo
查询mongodb对应的Collection和数据:
多适配器混用
由于Waterline的特性,Sails支持在Model层混用适配器,比如我们有以下配置:
module.exports.datastores = {default: {adapter: 'sails-mysql',url: 'mysql://root:123456@127.0.0.1:3306/sails',},mongodb: {adapter: 'sails-mongo',url: 'mongodb://127.0.0.1:27017/sails',}};
我们新建一个Model User:
module.exports = {datastore: 'mongodb',attributes: {id: {type: 'number', columnName: '_id',},username: {type: 'string',required: true,allowNull: false,unique: true,},password: {type: 'string',required: true,allowNull: false,},},};
进行测试,查看MySQL和Mongodb内的表与Collection:
通过http://127.0.0.1:1337/about/create?content=foo和http://127.0.0.1:1337/user/create?username=admin&password=123456
查看MySQL:
查看Mongodb:
可以看到我们已经成功的混合使用的不同的适配器。