sequelize 增加数据库字段_Node中Sequelize操作MySQL解决方案

好久没写一篇博客了,这段时间都在忙换工作的事,终于再次稳定下来,后面全力向Node前进了。

Sequelize是一个基于promise的关系型数据库ORM框架(Object-Relational-Mapper),通过建立数据库地图模型,就可以很方便的通过查询参数操作数据库,而操作数据库之后的回调全部默认通过promise的方式实现,当然现在还可通过ES7的await/async配合promise来实现代码逻辑,看起来将会更舒服。

安装

npm install sequelize

npm install mysql

建立model

当我们在开发一个大型项目的时候,往往不止需要调动一个映射表,为了避免每次调动都需要自己加上配置参数、同时可以在团队协作中统一配置,我们应该为每一个映射表单独建立一个model文件。

比如连接一个叫db_live的数据库,我们可以先建立一个所有映射表通用的db_live_config.js文件,在里面加上数据库基本配置如下:

const Sequelize = require('sequelize');

console.log('init dbbase...');

//连接数据库

var db_live = new Sequelize('dbname', 'username', 'password', {

host: 'localhost',

dialect: 'mysql',

pool: {

max: 5,

min: 0,

idle: 10000

}

});

const ID_TYPE = Sequelize.STRING(50);

//统一映射模型的基本配置

function defineModel(name, attributes) {

//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.createdAt = {

type: Sequelize.BIGINT,

allowNull: false

};

attrs.updatedAt = {

type: Sequelize.BIGINT,

allowNull: false

};

attrs.version = {

type: Sequelize.BIGINT,

allowNull: false

};

//模型映射定义

//attrs现在是业务字段加上通用配置字段的总数组了

return db_live.define(name, attrs, {

tableName: name,

timestamps: false,

' freezeTableName': true,//否则会自动为表名添加一个后缀s

//判断是否是isNewRecord从而设置主键、时间戳和版本号

hooks: {

beforeValidate: function (obj) {

let now = Date.now();

if (obj.isNewRecord) {

if (!obj.id) {

obj.id = generateId();

}

obj.createdAt = now;

obj.updatedAt = now;

obj.version = 0;

} else {

obj.updatedAt = Date.now();

obj.version++;

}

}

}

});

}

定义表的业务字段

接下来我们可以为需要操作的某一个表(t_live)添加一个t_live.js,如下:

const db_live = require('../db_live_config');

module.exports = db_live.defineModel('t_live', {

email: {

type: db.STRING(100),

unique: true

},

passwd: db.STRING(100),

name: db.STRING(100),

gender: db.BOOLEAN

});

调用

const t_live = require('./t_live');

t_live.create({

//新增字段

}).then(result => {

//回调

}).catch(err => {

//错误处理

})

关于这里使用await/async配合promise可以让代码看起来更清新

(async () => {

var result = await t_live.create({

//新增字段

});

//回调代码

})();

PS:

目前最新版本的Node已经正式支持await/async,可以更愉快的对待Node中无比烦恼的回调了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值