三 Koa2项目中使用ORM框架

5 篇文章 0 订阅

一 什么是ORM?

1.ORM是对象关系映射,ORM框架即对象关系映射框架,使用ORM可以免去我们写SQL语句的烦恼,可以直接通过操作模型对象进行增删改查,让开发人员更加注重于业务的实现,告别SQL语句。总之优点多多,大家自行百度。
2.以下操作均在Koa2项目的根目录终端下进行操作

二 Sequelize

1.Node.js中的ORM框架,首当其冲的便是Sequelize, 这是npmjs上的地址Sequelize
2.官方网站是英文的,不过幸亏有中文网,大家可自行阅读Sequelize中文网

三 Sequelize准备工作

1.进入之前的测试项目,安装Sequelize,Mysql,及Sequelize工具

 npm i sequelize -S  //安装Sequelize
 npm i mysql2 -S //安装mysql2
 npm i sequelize-cli -g  //sequelize-cli 注意Sequelize-cli是全局安装

2.全部安装完成之后,使用Sequelize-cli初始化项目

sequelize init

运行该命令时如果抛出以下错误:
在这里插入图片描述
这是因为powershell并非管理员身份运行,使用一下命令修改策略组,再次运行即可

set-ExecutionPolicy RemoteSigned
sequelize init

在这里插入图片描述
出现一下内容,则说明Sequelize初始化项目成功,这是我们可以看到项目文件夹中多了几个文件。
在这里插入图片描述

其中,config文件夹以及文件夹里的config.js用于配置数据库的相关信息,
migrations,存储的是迁移文件,用于数据库及数据库表的更新,注意,这里更新的是数据库,而不是数据。
models,存储模型文件。
seeders,存储种子文件,用于向数据库表添加测试数据。

四 Sequelize创建数据库,数据表,测试数据

1.想要操作数据库,首先得配置数据库,首先在config文件夹中的config.js配置数据库相关连接内容,默认内容如下。
在这里插入图片描述
development为开发环境,
test为测试环境
production为生产环境
在这里插入图片描述
我们在开发环境的节点中配置我们的数据库。

"development": {
    "username": "root",  //用户名
    "password": "123456",    //用户密码
    "database": "koa2test",      //数据库
    "host": "127.0.0.1",   //数据库地址
    "dialect": "mysql"    //数据库类型,这里的数据库支持多种数据库,我们使用mysql
  }

这里的koa2test数据可以不是已经存在的数据库,我们可以使用Sequelize命令去创建它。

sequelize db:create --charset 'utf8'  //charset 后边可以设置数据库的字符集格式

在这里插入图片描述
执行完成之后,可以看到数据库已经被创建,打开数据库管理工具,例如Navicat Premium,可以看到名为koa2test的数据库数据库已经存在,且字符集也是我们设置的utf8
在这里插入图片描述

如果发生错误,请检查项目配置环境或电脑自身的mysql环境是否正常。

2.创建数据库表,模型以及迁移文件
我们先来创建一个SystemManager 的数据表,默认添加一个string类型的字段,account

sequelize model:generate --name system_manager --attributes account:string

这时,Sequelize会自动创建一个迁移文件,和一个model文件。
在这里插入图片描述
打开迁移文件,可以看到迁移文件中已经默认为我们添加了id,createAt,updateAt这三个字段,我们手动编写的account字段也在其中。在这个文件中,我们可以根据自动生成的代码去修改迁移文件,毕竟,在命令行中编写完全部字段还是很麻烦的。
在这里插入图片描述
现在来运行迁移文件

sequelize db:migrate

在这里插入图片描述
打开数据库,可以看到表和字段都已经被创建
在这里插入图片描述
注意:这里的模型和数据表的区别,创建表时会自动为表名加上s,即模型为system_manager,数据库的表名为system_managers

五 创建测试数据,种子文件

sequelize seed:generate --name system_manager //创建一个名为system_manager 的种子文件

运行完成之后,可以在seeders文件夹中看到多了一个文件,且内容如下
在这里插入图片描述
根据给出的示例,添加两条数据
在这里插入图片描述
全部代码如下,注意区别修改过的地方,尤其注意对模型名称的修改,注意这里要使用数据表的名字system_managers,而不是模型名称。

'use strict';

module.exports = {
  up: async (queryInterface, Sequelize) => {
    /**
     * Add seed commands here.
     *
     * Example:
     * await queryInterface.bulkInsert('People', [{
     *   name: 'John Doe',
     *   isBetaMember: false
     * }], {});
    */
    await queryInterface.bulkInsert('system_managers', [{
      account: 'admin',
      password: '123456',
      name: "shawn",
      phone: "18800000000",
      age: 28,
      role: "超级管理员",
      createdAt: new Date(),
      updatedAt: new Date()
    },
    {
      account: 'test',
      password: '123456',
      name: "tony",
      phone: "18800000001",
      age: 23,
      role: "系统测试员",
      createdAt: new Date(),
      updatedAt: new Date()
    }], {});
  },

  down: async (queryInterface, Sequelize) => {
    /**
     * Add commands to revert seed here.
     *
     * Example:
     * await queryInterface.bulkDelete('People', null, {});
     */
    await queryInterface.bulkDelete('system_managers', null, {});
  }
};

完成之后,运行种子文件

sequelize db:seed:all

如果要单独运行指定的种子文件,则使用一下命令

sequelize db:seed --seed file_name  //file_name是种子文件的名称

在这里插入图片描述
运行完成以后,查看数据表,可以看到,我们的测试数据已经添加到数据库中去了。
在这里插入图片描述

至此,我们已经使用Sequelize完成了创建数据库,数据表,模型,种子数字的操作,整个操作流程步骤如下:
在这里插入图片描述
后面的内容将开始讨论如何通过Sequelize对数据库进行增删改查操作。

总结

文章仅仅讲述了Sequelize的基本用法,其他更多用法,请参考官方网站。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Node.js 使用 Koa 框架进行事务管理可以使用以下两种方式: 1. 使用数据库事务:如果你使用的是支持事务的数据库(如 MySQL、PostgreSQL 等),那么你可以使用数据库提供的事务功能来管理事务。在 Koa ,你可以使用像 Sequelize 这样的 ORM 库来管理数据库操作。 例如,在 Sequelize 使用事务的代码示例: ``` // 创建一个事务 const transaction = await sequelize.transaction(); try { // 在事务执行数据库操作 await User.create({ name: 'John Doe' }, { transaction }); await Profile.create({ userId: 1, bio: 'Hello, world' }, { transaction }); // 提交事务 await transaction.commit(); } catch (error) { // 回滚事务 await transaction.rollback(); } ``` 在上面的示例,我们使用了 `sequelize.transaction()` 方法来创建一个事务,并将其传递给每个数据库操作。如果其任何一个操作失败,那么事务将会回滚,所有操作都将被撤销。 2. 使用 Koa 间件:另一种管理事务的方法是使用 Koa 间件来实现。你可以编写一个间件函数,将所有需要在事务执行的操作包裹起来,并在出现错误时回滚事务。 例如,在 Koa 使用间件管理事务的代码示例: ``` app.use(async (ctx, next) => { const transaction = await sequelize.transaction(); try { // 将事务对象绑定到上下文对象 ctx.transaction = transaction; // 执行下一个间件 await next(); // 提交事务 await transaction.commit(); } catch (error) { // 回滚事务 await transaction.rollback(); // 抛出错误 throw error; } }); // 在路由使用事务 router.post('/users', async (ctx) => { // 从上下文对象获取事务对象 const transaction = ctx.transaction; try { // 在事务执行数据库操作 await User.create({ name: 'John Doe' }, { transaction }); await Profile.create({ userId: 1, bio: 'Hello, world' }, { transaction }); // 发送响应 ctx.body = { success: true }; } catch (error) { // 如果发生错误,将会自动回滚事务 throw error; } }); ``` 在上面的示例,我们编写了一个 Koa 间件函数,该函数会在每个请求创建一个事务,并将其绑定到上下文对象。在路由处理函数,我们可以从上下文对象获取事务对象,并使用它来执行数据库操作。如果任何一个操作失败,间件将会回滚事务,并将错误抛出到全局错误处理函数。 总的来说,使用数据库事务或 Koa 间件来管理事务都是有效的方式。选择哪种方式取决于你的具体需求和项目的架构。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值