gpt4 book ai didi

node.js - 如何将模型声明与数据库连接分开?

转载 作者:太空宇宙 更新时间:2023-11-03 22:40:03 24 4
gpt4 key购买 nike

我想声明独立于特定连接配置的模型。

理论代码如下所示:

const connection = require('bookshelf')(knex);

// Declare User model.
const User = require('bookshelf')
.Model
.extend({
tableName: 'user'
});

// Fetch data for data model using a specific instance of Bookshelf.
User
.use(connection)
.fetchAll();

.use 是一个虚构的方法。我在 中找不到等效方法API。

想要这种级别的分离的原因是为了实现隔离测试。

最佳答案

我认为您的问题是配置问题而不是书架问题。我认为最好的方法是首先使用 Node 中的环境变量来存储数据库连接字符串。这个想法是为不同的环境(开发、测试、阶段、产品等)提供与实际代码库分离的特定配置。在 Node 中使用环境变量的方法有很多,因此我不会一一介绍。几个好的是 dotenvnode-foreman 。我们使用node-foreman,因为我们主要在heroku 上运行。我有一个 .env 文件,其中包含未 checkin git 的配置选项。 node-foreman 支持 json .env 文件,所以我的文件看起来像这样:

{
"DATABASE_URL": "postgres://user:pass@host:port/schema",
"LOG_LEVEL": "DEBUG"
}

它可能包含更多内容,但您明白了。我将有多个针对不同环境的 .env 文件(即 .env.dev、.env.test、.env.stage 等)。同样,由于我使用 node-foreman,所以我使用 nf start 启动它,默认情况下使用 .env 文件,但您可以使用 -e 标志,如下所示:nf -e .env .测试开始

然后,您可以在应用中使用 process.env 访问此配置。然后你就可以拥有 db.js:

const dbOptions = {client: 'postgres', connection: process.env.DATABASE_URL};
const knex = require('knex')(dbOptions);
const bookshelf = require('bookshelf')(knex);
module.exports = {
knex,
bookshelf,
}

然后,您需要在模型文件中需要该文件的位置使用该文件。所以这可能会出现在 usermodel.js 中:

const bookshelf = require('./db').bookshelf;
const User = bookshelf
.Model
.extend({
tableName: 'user'
});

module.exports = {
User,
}

然后,在您的 app.js 中(或者您需要查询用户的任何地方):

const User = require('./usermodel').User;
User.fetchAll();

因此,一旦完成此设置,您只需使用 nf -e .env.whatever 使用不同的配置启动应用程序

关于node.js - 如何将模型声明与数据库连接分开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39022745/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com