在开发应用的过程中,数据库迁移是一个常见的需求。它可以让我们轻松地管理应用程序的数据库结构。Hapi 是一个流行的 Node.js 应用程序框架,提供了一个叫做 knex.js
的数据库迁移插件,使得数据库迁移变得更加简单。本文将深入探讨 knex.js
的使用方法。
什么是数据库迁移?
在开发应用程序的过程中,我们需要维护数据库的结构和数据。数据库迁移是一种将数据库从一种状态迁移到另一种状态的方式,包括添加、修改或删除表、列和索引等操作。它可以让多个开发者在不同时间工作在同一个数据库上,并确保数据库一致性。
什么是 Knex.js?
knex.js
是一个流行的 Node.js 应用程序框架中的数据库迁移和查询构建器。它可以让您快速构建复杂的 SQL 查询,并与许多流行的数据库一起使用,如 PostgreSQL、MySQL、SQLite、Oracle、MSSQL 和 Amazon Redshift。它还支持 Promise 和事务管理。
以下是如何在 Hapi 应用程序中使用 knex.js
插件的指南。
如何安装 Knex.js 插件
首先,您需要安装 knex.js
模块和驱动程序。例如,如果您选择使用 PostgreSQL 数据库,您需要安装以下模块:
$ npm install knex pg
接下来,安装 Hapi-knex-migrations
和 Hapi-knex-hikarpool
插件。这些插件提供了在 Hapi 应用程序中使用 knex.js
的实用程序。
$ npm install hapi-knex-migrations hapi-knex-hikarpool
配置 Knex.js 和插件
接下来,您需要在应用程序中配置 knex.js
。 这可以通过在应用程序中调用 Knex()
函数完成。例如:
-- -------------------- ---- ------- ----- ---- - ---------------- ----- ---- - ------ ------- ------------- ----------- - ----- ------------ ----- --------------------- --------- ------------------------- --------- ------------- - ---展开代码
您需要使用此 knex
对象来进行数据库操作。
现在,您应该配置 Hapi-knex-migrations
和 Hapi-knex-hikarpool
插件。在 Hapi 应用程序中,将以下代码添加到服务器配置 options
中:
-- -------------------- ---- ------- ----- ---------- - - ---------- ----------------- -- ----- ---- - - ---- -- ---- --- -------------------- ----- --------------------- ------ -------------------------- ---- ------------------ ------ ------------------- ----- -------------------------- ---- -- ----- --------------- - - ----------- ----- ----------- ---- -- ----- ----------------- - ------- -------------------------------- -------- ---------------- -- - ------- ------------------------------- -------- ---------------- -- ---展开代码
在此处,请确保传入 Knex 实例 knex
,上一步中已经创建。此外,您还需要配置 Migrations directory
和 Connection Pool
。
使用 Knex.js 进行数据库迁移
现在,您已经将 knex.js
和插件配置完毕,接下来可以使用 knex.js
进行数据迁移。首先,您需要为项目创建一个迁移:
$ npx knex migrate:make test_migration
执行以上命令后,将在 ./db/migrations
目录下生成一个新文件 test_migration.js
。这是数据库迁移的文件,您可以在其中编写迁移操作。
例如,添加一个新的表格:
-- -------------------- ---- ------- ---------- - -------------- - ------ ------------------------------- --------------- - ------------------- --------------------- --- -- ------------ - -------------- - ------ ------------------------------ --展开代码
在上文的代码中,up
函数表示将要执行的迁移操作,并在表中创建两个列 id
和 name
。down
函数表示逆向迁移操作,需要删掉刚刚添加的 test
表格。
执行以下命令进行迁移:
$ npm run knex migrate:latest
此外,您可以使用以下命令执行特定迁移:
$ npm run knex migrate:up 20210514160409_test_migration
在以上命令中,20210514160409_test_migration
是刚刚创建的迁移文件名。
执行迁移后,您可以在数据库中查看新创建的 test
表格。
如何使用 Knex.js 进行查询
在进行数据库操作时,knex.js
还提供了一种流畅的查询构建器,使得数据库操作变得更加容易。这里简要介绍过一下。例如,以下是如何在 users
表格中获取所有用户的代码:
const results = await knex('users').select('*');
您还可以通过以下代码向 users
表格中添加数据:
await knex('users').insert([ { username: 'Alice', email: 'alice@example.com' }, { username: 'Bob', email: 'bob@example.com' }, ]);
要更新现有行,请使用以下代码:
await knex('users') .where({ id: 1 }) .update({ email: 'new-email@example.com' });
要获取特定行,请使用以下代码:
const results = await knex('users').where({ id: 1 }).first();
在其中,first()
函数将返回第一个匹配的行。
如何使用 Knex.js 进行事务管理
事务管理是一种将一组数据库操作视为单个单元的技术。如果所有操作都成功,则事务将被提交并成为永久性更改。如果其中一个操作失败,则整个事务将被回滚到它的起点。这可以确保在操作中出现问题时,数据库保持一致性。
以下是如何在 knex.js
中使用事务:
await knex.transaction(async (trx) => { await trx('users').insert({ username: 'Alice', email: 'alice@example.com' }); await trx('users').update({ email: 'new-email@example.com' }); });
在以上代码中,trx
参数可以用于代替 knex
对象,并且只是具有带有事务管理功能。使用 trx.rollback()
和 trx.commit()
函数可以管理事务。如果不调用 trx.commit()
或调用 trx.rollback()
,则事务将被回滚。
总结
通过使用 knex.js
插件和 Hapi-knex-migrations
以及 Hapi-knex-hikarpool
包装器,可以在 Hapi 应用程序中轻松进行数据库迁移。此外,knex.js
还提供了广泛的查询构建器和事务管理功能,使开发更加轻松。希望本文可以帮助您在 Hapi 应用程序中使用 knex.js
时获得成功。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64f1d27df6b2d6eab3ba61cb