Bookshelf.js / Knex.js上数据库架构加载的常见做法

时间:2016-10-05 19:52:47

标签: node.js bookshelf.js knex.js

ActiveRecord(来自Rails)和Sequelize(另一个node.js ORM)都提供了一种初始化数据库的方法,从模型定义创建表结构。 Rails通过rails db:schema:load命令执行此操作,而Sequelize使用sync()方法执行相同操作。通过使用它,我们不需要运行应用程序的整个迁移堆栈来启动新数据库,也不需要在项目存储库中保存SQL转储。

从这个背景出发,我期待Bookshelf.js或Knex.js具有某种类似的功能,但我无法在两个项目的文档中找到它。

然后我决定看一下使用Bookshelf的Ghost blogging engine的源代码,我发现他们在自己的代码库中处理数据库初始化:

我想避免编写我自己的代码来处理这样的事情,因为Sequelize等其他选项提供了开箱即用的功能。

是否有任何常见的做法,插件或库建议在Bookshelf上加载数据库模式?

1 个答案:

答案 0 :(得分:1)

我认为你走在正确的轨道上,可能只是错过了文档。

http://knexjs.org/#Migrations

如果要将迁移写入幂等,则可以运行迁移堆栈来加载架构。

另一种选择是使用数据库的导出和导入功能。例如:https://www.postgresql.org/docs/9.1/static/app-pgdump.html

Rails通过两个rake任务db:schema:dump和db:schema:load来实现迁移。转储将以自定义ruby格式将数据库模式转储到本地schema.rb文件。 db:schema:加载加载该文件。

所以你可以使用pg_dump和pg_restore以及一个npm包脚本来实现类似的功能。只需让脚本使用node的exec方法调用pg_dump并每次都转储到同一个文件。