Node.JS提供了操作數(shù)據(jù)庫(kù)的基礎(chǔ)接口,我們可以通過mysql模塊的query方法進(jìn)行操作,但是需要編寫SQL語(yǔ)句,對(duì)于SQL語(yǔ)句并不精通的人來說有一定的難度,而且在代碼中保留SQL語(yǔ)句也有一定的危險(xiǎn)性。為了方便進(jìn)行數(shù)據(jù)庫(kù)操作,ORM框架應(yīng)運(yùn)而生,Sequelize正是這樣的模塊。
安裝Sequelize
首先,使用cd命令將終端控制臺(tái)定位到項(xiàng)目的根目錄,然后使用npm安裝:
npm install sequelize --save
安裝mysql2
由于sequelize依賴于mysql2所以也需要安裝mysql2:
npm install mysql2 --save
編寫配置
在項(xiàng)目根目錄新建個(gè)“configs”文件夾,在文件夾中新建一個(gè)名為“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: 數(shù)據(jù)庫(kù)名稱 uname: 數(shù)據(jù)庫(kù)登錄名 upwd: 數(shù)據(jù)庫(kù)登錄密碼 host: 數(shù)據(jù)庫(kù)主機(jī) port: 數(shù)據(jù)庫(kù)端口,mysql默認(rèn)是3306 dialect: 數(shù)據(jù)庫(kù)類型,這里是mysql pool: 連接池配置【具體配置詳見MySQL相關(guān)的博客】
對(duì)sequelize進(jìn)行簡(jiǎn)單封裝
在項(xiàng)目根目錄新建“data”文件夾,在改文件夾中新建“db.js”文件。在db.js中添加以下代碼。
首先,創(chuàng)建sequelize實(shí)例:
// 引入模塊const Sequelize = require('sequelize');// 讀取配置const mysqlConfig = require('../configs/mysql-config');// 根據(jù)配置實(shí)例化seqvar seq = new Sequelize(mysqlConfig.dbname, mysqlConfig.uname, mysqlConfig.upwd, { host: mysqlConfig.host, dialect: mysqlConfig.dialect, pool: mysqlConfig.pool});定義一個(gè)defineModel函數(shù)用于定義數(shù)據(jù)模型:
/** * 定義數(shù)據(jù)模型 * * @param {any} name 模型名稱【數(shù)據(jù)庫(kù)表名】 * @param {any} attributes 數(shù)據(jù)字段集合 * @returns 數(shù)據(jù)模型對(duì)象 */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 }; // 狀態(tài):0表示有效,1表示無(wú)效,2表示已刪除,默認(rèn)為0. attrs.status = { type: Sequelize.INTEGER, allowNull: false }; // 調(diào)用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; } } } });}
新聞熱點(diǎn)
疑難解答
圖片精選