当前位置: 首页 > 后端技术 > Node.js

Sequelize模块初步使用——Node实战

时间:2023-04-03 14:18:15 Node.js

在NodeWeb开发过程中,一直使用Mysql作为后台数据库。没别的原因,我觉得很熟悉。图形界面操作起来比较简单,对数据库也简化了很多。手术。一开始,我总是提前在图形化界面的Mysql中创建好我想要的数据表,然后开始写我的项目代码。当然,这个过程一直穿插在整个项目的开发过程中。有时候某个功能一开始没有想好,就重新修改数据表,然后根据数据表结构修改代码。刚开始学习的时候,一直关注前台和后台的逻辑,较少关注数据库,而且开发基本上都是自己在一台机器上完成的,所以觉得这种操作不算特别麻烦。后来换了机器继续写代码的时候,发现这种方法实在是太不方便了。我在A电脑上修改代码,修改数据表结构的时候,通过GItCode去B电脑同步,但是数据表结构还要在A电脑上复制一份修改后的数据表结构,想想也是醉了。这种实现方式不仅比较低级,而且维护起来也很不方便。一方面需要编写交互逻辑代码,另一方面需要拼接SQL语句获取数据。理论上应该在后台业务逻辑和数据库访问逻辑之间再建一层,封装所有的数据库操作,调用对象方法,取消拼接SQL,实现数据获取。是的,这就是ORM(对象关系映射)框架。Hibernate在J2EE开发中的三剑客SSH是ORM的一种实现。在NodeWeb的开发中,找到了Sequelize,看了下文档。用起来感觉不错,至少解决了我上面提到的问题。引入模块等准备工作就不废话了,直接上手实战。1.创建连接对象,并模块化新建数据库连接模块dbConnect.js,单独提出sequelize对象连接数据库,如下:varSequelize=require('sequelize');//引入数据库配置文件varsqlConfig=require('config-lite')(__dirname).mysql;varsequelize=newSequelize(sqlConfig.database,sqlConfig.user,sqlConfig.password,{host:sqlConfig.host,dialect:'mysql',池:{max:10,min:0,idle:10000}});module.exports=sequelize;上述代码使用了配置模块config-lite,具体使用请参考本文。然后根据数据库的一些参数,创建sequelize的数据库连接模块。2.定义数据表结构,将表结构写入代码。我目前使用的方法是:每个表对应一个文件,放在Node项目的models目录下。这是我创建的一个todolist表作为示例。在models目录下创建todolist.js文件,代码如下:varSequelize=require('sequelize');varsequelize=require('./dbConnect.js');vartodolist=sequelize.define('todolist',{id:{type:Sequelize.BIGINT(11),primaryKey:true,allowNull:false,unique:true,autoIncrement:true},title:Sequelize.STRING(100),//标题内容:Sequelize.STRING(500),//详细内容优先级:Sequelize.INTEGER,//级别所有者:Sequelize.STRING,//继任官:Sequelize.STRING,//负责人startDate:Sequelize.STRING,//开始时间planFinishDate:Sequelize.STRING,//计划完成时间realFinishDate:Sequelize.STRING,//实际完成时间bz:Sequelize.STRING(500),//Notestate:Sequelize.INTEGER,//StatecreatedAt:Sequelize.BIGINT,updatedAt:Sequelize.BIGINT,version:Sequelize.BIGINT},{timestamps:false//不要默认时间戳});module.exports=todolist;上面的代码直接导入之前创建的sequelize对象,然后使用defind方法定义数据表结构。其他所有的数据表都可以这样定义,保存在每个独立的文件中,直接引出数据模块。3、易于同步数据表结构。单独创建一个工具类。我的做法是在项目中新建一个libs/util目录,然后新建一个syncTable.js。代码如下:vartodolist=require('../../models/todolist.js');//同步表结构todolist.sync({force:true//强制同步,先删除表,再删除表创建一个新的});这样就OK了,每次我换电脑继续项目的时候,你不需要单独操作数据库来保证数据库结构一致,只需要手动执行这个方法即可。4.创建一些初始数据通过这个方法,我们还可以创建一个工具类来初始化一些基础数据,如下addMasterData.js代码:varpriority=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('失败:'+err);});在优先级表中创建一些初始数据。默认表名会加s。在定义表时,可以通过tableName属性的值来定义对应的表名,如下例定义表名为u_priority:varpriority=sequelize.define('priority',{id:{type:Sequelize.BIGINT(11),primaryKey:true,allowNull:false,autoIncrement:true},title:Sequelize.STRING,},{timestamps:false,tableName:'u_priority'//数据表名称为u_priority});OK就这些了,这次就到这里了,深入学习后,欢迎分享更多内容,请访问:http://lupeng.me