Knex 在 Koa2 中的应用
Knex.js是为Postgres,MSSQL,MySQL,MariaDB,SQLite3,Oracle和Amazon Redshift设计的“包含电池”SQL查询构建器,其设计灵活,便于携带并且使用起来非常有趣。它具有传统的节点样式回调以及用于清洁异步流控制的承诺接口,流接口,全功能查询和模式构建器,事务支持(带保存点),连接池 以及不同查询客户和方言之间的标准化响应。
准备工作,环境变量配置
利用 dotenv
模块将根目录下的 .env
文件配置注入到 process.env
中,
1 | // .env |
在根目录创建 knexfile.js
作为knex
的配置文件,区分不同的开发环境,对配置进行差异化处理。
1 | knex init |
1 | //knexfile.js |
引入配置,初始化 knex
创建 /db/db.js
作为全局的 db
对象,数据的增删改查都通过 db
对象进行
1 | var environment = process.env.NODE_ENV || 'development'; // 判断当前的开发环境 |
migrations 和 seeds
migrations
migrations
允许你定义数据库的模块,所以使得数据库升级变得简单。migrations CLI
被包含在 kenx
中,请全局安装 $ npm install knex -g
migrations
依赖于 knexfile
,请提前配置好, 创建 /db/migrations
目录。
创建 migrate
knex migrate:make migration_name
修改 /db/migrations/migration_name.js
其中 up
方法在 migrate run
的时候被执行,用户创建表,down
方法在 migrate rallback
被执行,执行表销毁。
1 | //I only want migrations, rollbacks, and seeds to run when the NODE_ENV is specified |
初始化数据库表
完成了 migrate
,就可以进行创建表工作,执行 migrate 的 up
方法。
1 | knex migrate:latest |
更新
1 | knex migrate:make update migration_name |
回滚
1 | knex migrate:rollback |
⚠️ 以上的命令都可以增加环境变量 例如
NODE_ENV=development knex migrate:latest
seeds
seeds
为种子,即数据的初始化,可以 mock
数据,插入到表中, 创建 /db/seeds/dev
(对应不同环境seeds
)
创建 seed
1 | knex seed:make seed_users |
编辑 seed
1 | //I only want migrations, rollbacks, and seeds to run when the NODE_ENV is specified |
运行 seed
将数据插入到表中
1 | knex seed:run |
⚠️ 注意以上命令可以增加环境变量 ,例如
NODE_ENV=development knex seed:run
操作数据库
以上已经完成数据库的准备工作,一切正常则可使用 knex 操作数据库
引入 db
1 | import db from '../db/db.js'; |
查询
1 | // 检查数据库用户是否存在 |
增加
1 | var [result] = await db('users').insert(request).returning('id'); |
修改
1 | await db('refresh_token').update({ |
删除
1 | await db('notes').delete().where({id: this.id}); |