在Node Web开发过程中,后台数据库我一直使用的都是Mysql,没有别的什么原因,就觉得熟悉,图形界面操作起来比较简单,简化了好多关于数据库方面的操作。

最开始的时候,我一直都是提前将我要的数据表在Mysql里用图形界面创建好,然后再开始我的项目代码编写,当然这个过程一直穿插在整个项目的开发中,有时候某个功能最开始想得不太全,于是就重新修改数据表,再根据数据表结构进行代码的修改。刚开始学习的时候,一直关注前台后台逻辑,数据库方面关注得比较少,而且开发基本都是自己一个人一台机器上完成,所以也没觉得这种操作特别麻烦。

后来换台机器继续写代码的时候,就会发现,这种方式真的是太不方便了,当我在A电脑上修改了代码,并且修改了数据表结构之后,去B电脑上通过GIt同步代码,但是数据表结构还得copy一份A电脑上修改过的数据表结构,想想也是醉了。这种实现方式不仅比较Low,并且维护起来也非常的不方便,一方面要写交互逻辑代码,一方面要拼接sql语句来获取数据。

从理论上讲应该在后台业务逻辑以及数据库取数逻辑中间再架一层,将数据库操作全部封装起来,调用对象方法而取消拼接SQL来实现数据的获取,没错,这就是ORM(Object Relational Mapping)框架。J2EE开发三剑客SSH中的Hibernate就是ORM的一种实现方式。Node Web开发中,我找到了Sequelize,看看文档,用起来感觉还是不错,最起码解决了我的上述的困扰。

引入模块等等准备工作我就不多废话了,直接上手实战。

1. 创建连接对象,并模块化

新建数据库连接模块dbConnect.js,单独提出连接数据库的对象sequelize,如下代码:

var Sequelize = require('sequelize');

// 引入数据库配置文件

var sqlConfig = require('config-lite')(__dirname).mysql;

var sequelize = new Sequelize(sqlConfig.database, sqlConfig.user, sqlConfig.password, {

host: sqlConfig.host,

dialect: 'mysql',

pool: {

max: 10,

min: 0,

idle: 10000

}

});

module.exports = sequelize;

上面代码使用了配置模块config-lite,具体使用可以参考这篇文章。然后根据数据库的一些参数,创建了sequelize的数据库连接模块。

2. 定义数据表结构,将表结构写进代码里

目前我使用的方式是:每个表对应一个文档,放入Node项目中models目录中,这里拿我创建的一个todolist表来做示例,在models目录中创建todolist.js文件,代码如下:

var Sequelize = require('sequelize');

var sequelize = require('./dbConnect.js');

var todolist = sequelize.define('todolist',{

id: {

type: Sequelize.BIGINT(11),

primaryKey: true,

allowNull: false,

unique: true,

autoIncrement: true

},

title: Sequelize.STRING(100), // 标题

content: Sequelize.STRING(500), // 详细内容

priority: Sequelize.INTEGER, // 级别

owner: Sequelize.STRING, // 承接人

officer: Sequelize.STRING, // 负责人

startDate: Sequelize.STRING, // 开始时间

planFinishDate: Sequelize.STRING, // 计划完成时间

realFinishDate: Sequelize.STRING, // 实际完成时间

bz: Sequelize.STRING(500), // 备注

state: Sequelize.INTEGER, // 状态

createdAt: Sequelize.BIGINT,

updatedAt: Sequelize.BIGINT,

version: Sequelize.BIGINT

},{

timestamps: false // 不要默认时间戳

});

module.exports = todolist;

以上代码,直接引入之前创建的sequelize对象,然后使用defind方法定义数据表结构。其他的所有数据表都可以通过这种方式来定义,保存在每一个独立的文件中,引出数据模块即可。

3. 同步数据表结构

这个就简单了,单独创建一个工具类,我的做法是在项目中新建libs/util目录,然后新建syncTable.js,代码如下:

var todolist = require('../../models/todolist.js');

// 同步表结构

todolist.sync({

force: true // 强制同步,先删除表,然后新建

});

这样就OK了,当每次我换电脑继续项目的时候,不用单独操作数据库以确保数据库结构一致了,只需要手动执行一下该方法就可以了。

4. 创建一些初始数据

通过这种方法,我们同样可以创建一个工具类,用来初始化一些基础数据,如下addMasterData.js代码:

var priority = require('../../models/priority.js');

// 创建u_priority表的基础数据

priority.create({

title: '重要 紧急'

}).then(function (p) {

console.log('created. ' + JSON.stringify(p));

}).catch(function (err) {

console.log('failed: ' + err);

});

priority.create({

title: '重要 不紧急'

}).then(function (p) {

console.log('created. ' + JSON.stringify(p));

}).catch(function (err) {

console.log('failed: ' + err);

});

priority.create({

title: '不重要 紧急'

}).then(function (p) {

console.log('created. ' + JSON.stringify(p));

}).catch(function (err) {

console.log('failed: ' + err);

});

priority.create({

title: '不重要 不紧急'

}).then(function (p) {

console.log('created. ' + JSON.stringify(p));

}).catch(function (err) {

console.log('failed: ' + err);

});

给prioritys表里创建一些初始数据,默认表名会添加s,定义表的时候可以通过tableName属性值来定义对应的表名,如下示例将表名定义为u_priority:

var priority = sequelize.define('priority',{

id: {

type: Sequelize.BIGINT(11),

primaryKey: true,

allowNull: false,

autoIncrement: true

},

title: Sequelize.STRING,

},{

timestamps: false,

tableName: 'u_priority' // 数据表名为u_priority

});

好了,本次就到这里,深入学习后再做分享。

node mysql sequlize_初步使用Sequelize模块 - Node实战相关推荐

  1. node mysql sequlize_玩转Node.js-Sequelize基础

    每个索引对象可以设置的值: name:索引名称,默认模型名称+字段 fields: Array,索引字段 unique:唯一索引,默认false 增加索引的好处就是让数据库查询数据的时候变得更快. 模 ...

  2. node mysql timeout_Error: Handshake inactivity timeout in Node.js MYSQL module

    问题 I'm using node-mysql and most of the queries. Working. some queries not working. I tried every ve ...

  3. node mysql批量写入_如何使用node.js在MySQL中进行批量插入

    我四处寻找关于批量插入对象的答案. Ragnar123的回答使我得出了这样的结论:function bulkInsert(connection, table, objectArray, callbac ...

  4. node mysql 模块化_Node.js 模块系统

    Node.js模块系统 为了让Node.js的文件可以相互调用,Node.js提供了一个简单的模块系统. 模块是Node.js 应用程序的基本组成部分,文件和模块是一一对应的.换言之,一个 Node. ...

  5. Node.js(一)——(Node.js安装及使用,通过Node.js搭建服务器,模块化及自定义模块,npm/yarn/nvm,内置模块fs的使用,buffer及stream,新闻列表案例)

    目录 1.Node.js介绍 2.安装Node.js 3.使用Node.js实现第一个服务器 3.1初步感受Node.js 3.2Google Chrome 默认非安全端口列表,尽量避免以下端口. 3 ...

  6. ES6 node mysql笔记

    一.严格模式 1. 严格模式的声明 "use strict"; *目的 ​ 使代码更加严谨,为后期的版本做一个铺垫. *严格模式下的不同点 在严格模式下函数里面的this返回的是u ...

  7. node MySQL buffer_node.js中buffer方法使用说明

    熟悉JavaScript的童鞋应该对Node.js都不陌生,没错Node.js是一个基于Chrome JavaScript运行时建立的平台,用于方便地搭建响应速度快.易于扩展的网络应用.Node.js ...

  8. node与mysql开源_node与mysql的相互使用————node+mysql

    node与mysql的相互使用----node+mysql 为什么选node???因为我是个前端. 为什么选mysql???因为成熟,稳定,听说容易学. 一.mysql数据库: mysql下载和使用我 ...

  9. node+Mysql,数据库时区显示正确,查询时却显示另一个时区

    问题: 1.node+Mysql,查看数据库时区显示正确,但查询时,显示的确是另一个时区的时间. 2.前端调用接口返回:startTime: "2020-03-04T17:53:55.000 ...

  10. 二十六、深入Node.js中的文件系统fs模块

    @Author:Runsen @Date:2020/6/8 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏艰 ...

最新文章

  1. 汉印标签打印机app_旅行一族福音 汉印CP4000L便携照片打印机体验
  2. Oracle的闪回技术--闪回错误的DML操作
  3. 谷歌发布新编程语言,专治SQL各种“不服”
  4. ios 打电话结束返回到应用中
  5. WDS配置时遇到的问题
  6. 选择屏幕设置默认日期
  7. 不积跬步无以至千里[转]
  8. svn 403 Forbidden
  9. loadrunner如何监控linux,以及重点指标分析
  10. 追加docker已运行容器添加或修改端口映射方法
  11. 浮云语音转文字识别本地音频文字内容教程
  12. 学习linux—— 磁盘相关指令
  13. 谷歌云盘Colab使用心得
  14. OverFeat,分类、定位、检测
  15. DNS请求报文和响应报文解析
  16. 【GoCN酷Go推荐】protobuf生成Go代码插件gogo/protobuf
  17. 愤怒的小鸟有PC版本了!
  18. node 多版本管理 nvm-window(适用win7 win10)
  19. 4 数据可视化大屏 - 布局: BootStrap 之网格Grid
  20. GitHub Top 45:新手入门 Python,值得推荐的优质资源!

热门文章

  1. Atitit uke证件编码规范与范本
  2. 屏幕取词技术实现原理
  3. Atitit.java 虚拟机的构成 与指令分类 与 指令集合 以及字节码查看工具javjap
  4. Atitit.ati dwr的原理and设计 attilax 总结 java php 版本
  5. Atitit. 解决unterminated string literal 缺失引号
  6. paip.python错误解决8
  7. paip.PHP实现跨平台跨语言加解密方法
  8. 托管银行数字化转型发展探讨|专家视角
  9. Rust : 红楼梦一书中文字符的统计
  10. 常用数据库的字段类型及大小