? ? 因為工作中用到了waterline,在此簡單記錄一下其創(chuàng)建操作過程。
1,安裝相關(guān)模塊。
var WaterLine = require('waterline');
var MysqlAdapter = require('sails-mysql');
var MongoAdapter = require('sails-mongo');
2,配置適配器,適配器的作用就像一個翻譯小組,里面有懂各種不同數(shù)據(jù)庫語言的翻譯官,你只需要說你的語言就行,接下來的就交給adapters翻譯小組,下面就是支持mongo和mysql的adapter的配置,你還可以加入redis、sqlserver的。
var adapters = {
? ? mysql: MysqlAdapter,
? ? mongo: MongoAdapter,
? ? default: 'mysql'
}
3,配置與數(shù)據(jù)庫的鏈接,這里填入數(shù)據(jù)庫的連入信息
var connections = {
? ? mysql: {
? ? ? ? adapter: "mysql",
? ? ? ? host: "127.0.0.1",
? ? ? ? port: 3306,
? ? ? ? database: "test_waterline",
? ? ? ? user:'test',
? ? ? ? password:'123456'
? ? },
? ? mongo: {
? ? ? ? adapter: "mongo",
? ? ? ? host: "127.0.0.1",
? ? ? ? port: 27017,
? ? ? ? database: "test_waterline"
? ? }
}
4、上面說的你的語言就在下面定義語言格式,即用waterline定義數(shù)據(jù)庫中的表字段屬性,而不用去關(guān)心連接的是關(guān)系型數(shù)據(jù)庫或者是nosql。
? ? //下面想要在mysql的test_waterline庫中新建一個user表,使用waterline為user表配置數(shù)據(jù)集合。
var tableUser = WaterLine.Collection.extend({
? ? identity: 'user',//集合的id(對應(yīng)數(shù)據(jù)庫的表)
? ? connection: 'mysql',//要操作的數(shù)據(jù)庫
? ? schema: true,//強制模式
/*下面進行集合中對應(yīng)屬性的配置,用作對每一個屬性進行定義校驗方案,
主鍵用戶名為一個長度為4-15的字符串,用戶密碼為長度大于6的字符串*/
? ? attributes: {
? ? ? ? username: {
? ? ? ? ? ? type: 'string',
? ? ? ? ? ? required: true,
? ? ? ? ? ? minLength: 4,
? ? ? ? ? ? maxLength: 15,
? ? ? ? ? ? primaryKey: true,
? ? ? ? ?? unique: true,
? ? ? ? ? ? notEmpty: true,//已經(jīng)定義了長度,這里沒有意義,作為演示
? ? ? ? },
? ? ? ? userpass: {
? ? ? ? ? ? type: 'string',
? ? ? ? ? ? required: true,
? ? ? ? ? ? minLength: 6,
? ? ? ? },
? ? ?? address: {
? ? ? ? ? ? type: 'string'
? ? ? ? }
? ? },
? ? beforeCreate: function (value, areturn) {
? ? ? ? value.address = 'shanghai';
? ? ? ? console.log('beforeCreate');
? ? ? ? return areturn();
? ? }
});
5,新建一個orm實例,并將上面的user表集合配置加載進來。
//new 出一個實例
var orm = new WaterLine();
//將配置的數(shù)據(jù)集合加載進示例
orm.loadCollection(tableUser);
6、對orm進行初始化,并在回調(diào)中對test_waterline.user表操作,增加一行用戶名為testuser的數(shù)據(jù)
var config = {
? ?? adapters: adapters,
? ? connections: connections
}
//下面進行初始化
orm.initialize(config, function (err, models) {
? ? if (err) {
? ? ? ? console.log("orm init failed,err:%s", err);
? ? ?? return;
? ? }
? ? var oneUser = {
? ? ? ? username: "testuser",
? ? ? ? userpass: "1234567",
? ? }
? ? models.collections.user.create(oneUser, function (err, user) {
? ? if (err) {
? ? ? ? console.log('err:+%s。', err);
? ? }
? ? else {
? ? ? ? console.log('create success:\n', user)
? ? }
? ? });
});
運行結(jié)果如下:

附上代碼:
/*waterline使用測試*/
'use strict'
//npm安裝以下模塊
var WaterLine = require('waterline');
var MysqlAdapter = require('sails-mysql');
var MongoAdapter = require('sails-mongo');
//配置適配器
var adapters = {
mysql: MysqlAdapter,
mongo: MongoAdapter,
default: 'mysql'
}
//配置與數(shù)據(jù)庫的連接
var connections = {
mysql: {
adapter: "mysql",
host: "127.0.0.1",
port: 3306,
database: "test_waterline",
user:'test',
password:'123456'
},
mongo: {
adapter: "mongo",
host: "127.0.0.1",
port: 27017,
database: "test_waterline"
}
}
//使用waterline為user表配置數(shù)據(jù)集合
var tableUser = WaterLine.Collection.extend({
identity: 'user',//集合的id(對應(yīng)數(shù)據(jù)庫的表)
connection: 'mysql',//要操作的數(shù)據(jù)庫
schema: true,//強制模式
/*下面進行集合中對應(yīng)屬性的配置,用作對每一個屬性進行定義校驗方案,
主鍵用戶名為一個長度為4-15的字符串,用戶密碼為長度大于6的字符串*/
attributes: {
username: {
type: 'string',
required: true,
minLength: 4,
maxLength: 15,
primaryKey: true,
unique: true,
notEmpty: true,//已經(jīng)定義了長度,這里沒有意義,作為演示
},
userpass: {
type: 'string',
required: true,
minLength: 6,
},
address: {
type: 'string'
}
},
beforeCreate: function (value, areturn) {
value.address = 'shanghai';
console.log('beforeCreate');
return areturn();
}
});
//new 出一個實例
var orm = new WaterLine();
//將配置的數(shù)據(jù)集合加載進示例
orm.loadCollection(tableUser);
var config = {
adapters: adapters,
connections: connections
}
//下面進行初始化
orm.initialize(config, function (err, models) {
if (err) {
console.log("orm init failed,err:%s", err);
return;
}
var oneUser = {
username: "testuser",
userpass: "1234567",
}
models.collections.user.create(oneUser, function (err, user) {
if (err) {
console.log('err:+%s。', err);
}
else {
console.log('create success:\n', user)
}
})
});