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; } } } }); }
内容版权声明:除非注明,否则皆为本站原创文章。