上一个笔记中,我们已经认识了node-orm,它可以支持mongodb、mysql、postgres、 redshift、 _shared和sqlite。
之所以能支持这么多中数据库,是因为node-orm的lib中有对各种数据库支持的backend脚本,可以看一下orm/lib/Drivers/DML目录下的文件有mongodb.js、mysql.js、postgres.js、redshift.js、_shared.js、sqlite.js。这其中的每一个脚本其实都是对各种数据库驱动的封装,以mysql.js为例,我们可以看一下它的源码,它是依赖于mysql模块的。
var _ = require("lodash");
var mysql = require("mysql");
var Query = require("sql-query").Query;
var shared = require("./_shared");
var DDL = require("../DDL/SQL");
exports.Driver = Driver;
...
var User = db.define("user", {
id :Number,
name :String,
username :String,
password :String,
birthday :Date
});
var User = db.define("user", {
id :{type:'serial', mapsTo:'id', unique:true, size:11},
name :{type:'text', mapsTo:'name'},
username :{type:'text', mapsTo:'username'},
password :{type:'text', mapsTo:'password'},
birthday :{type:'date', mapsTo:'birthday', time:true}
});
db.defineType('numberArray', {
datastoreType: function(prop) {
return 'TEXT'
},
// This is optional
valueToProperty: function(value, prop) {
if (Array.isArray(value)) {
return value;
} else {
return value.split(',').map(function (v) {
return Number(v);
});
}
},
// This is also optional
propertyToValue: function(value, prop) {
return value.join(',')
}
});
var LottoTicket = db.define('lotto_ticket', {
numbers: { type: 'numberArray' }
});