Node.JS提供了操作数据库的基础接口,我们可以通过mysql模块的query方法进行操作,但是需要编写SQL语句,对于SQL语句并不精通的人来说有一定的难度,而且在代码中保留SQL语句也有一定的危险性。为了方便进行数据库操作,ORM框架应运而生,Sequelize正是这样的模块。
安装Sequelize
首先,使用cd命令将终端控制台定位到项目的根目录,然后使用npm安装:
npm install sequelize --save
安装mysql2
由于sequelize依赖于mysql2所以也需要安装mysql2:
npm install mysql2 --save
编写配置
在项目根目录新建个“configs”文件夹,在文件夹中新建一个名为“mysql-config.js”的文件,代码如下:
var config = {
dbname: 'testdb',
uname: 'root',
upwd: 'root',
host: 'localhost',
port: 3306,
dialect: 'mysql',
pool: {
max: 5,
min: 0,
idle: 10000
}
};
module.exports = config;
配置说明
- dbname: 数据库名称
- uname: 数据库登录名
- upwd: 数据库登录密码
- host: 数据库主机
- port: 数据库端口,mysql默认是3306
- dialect: 数据库类型,这里是mysql
- pool: 连接池配置
【具体配置详见MySQL相关的博客】
对sequelize进行简单封装
在项目根目录新建“data”文件夹,在改文件夹中新建“db.js”文件。在db.js中添加以下代码。
首先,创建sequelize实例:
// 引入模块
const Sequelize = require('sequelize');
// 读取配置
const mysqlConfig = require('../configs/mysql-config');
// 根据配置实例化seq
var seq = new Sequelize(mysqlConfig.dbname, mysqlConfig.uname, mysqlConfig.upwd, {
host: mysqlConfig.host,
dialect: mysqlConfig.dialect,
pool: mysqlConfig.pool
});
定义一个defineModel函数用于定义数据模型:
/**
* 定义数据模型
*
* @param {any} name 模型名称【数据库表名】
* @param {any} attributes 数据字段集合
* @returns 数据模型对象
*/
function defineModel (name, attributes) {
var attrs = {};
for (let key in attributes) {
let value = attributes[key];
if (typeof value === 'object' && value['type']) {
value.allowNull = value.allowNull || false;
attrs[key] = value;
} else {
attrs[key] = {
type: value,
allowNull: false
};
}
}
// 附加公共字段
// attrs.id = {
// type: ID_TYPE,
// primaryKey: true
// };
attrs.createAt = {
type: Sequelize.BIGINT,
allowNull: false
};
attrs.updateAt = {
type: Sequelize.BIGINT,
allowNull: false
};
attrs.version = {
type: Sequelize.BIGINT,
allowNull: false
};
// 状态:0表示有效,1表示无效,2表示已删除,默认为0.
attrs.status = {
type: Sequelize.INTEGER,
allowNull: false
};
// 调用seq的方法定义模型并返回
return seq.define(name, attrs, {
tableName: name,
timestamps: false,
hooks: {
beforeValidate: function (obj) {
let now = Date.now();
if (obj.isNewRecord) {
obj.createAt = now;
obj.updateAt = now;
obj.version = 0;
} else {
obj.updateAt = now;
++obj.version;
}
}
}
});
}
内容版权声明:除非注明,否则皆为本站原创文章。
