Node.JS使用Sequelize操作MySQL的示例代码

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;
        }
      }
    }
  });
}


      

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/6188.html