postgresql 使用knex创建graphql解析器

m4pnthwp  于 2023-01-02  发布在  PostgreSQL
关注(0)|答案(1)|浏览(121)

我正在使用graphQL查询我的数据库。我在使用knexjs将graphQL解析器写入我的数据库时卡住了。
我的问题是我希望查询或突变只使用1个数据库连接(如果这是错误的,请纠正我,但我真的认为这是正确的)。
例如,对服务器的调用

query {
    post {
        author
    }
}

应使用postauthor字段的2个数据库调用,在与数据库的单个连接中完成。
我认为事务是一条可行之路,我使用事务实现了解析器(下面是一个玩具示例):

const trxProvider = knex.transactionProvider();

const resolvers = {
    Query: {
        post: async () => {
            const trx = await trxProvider();
            let res = await trx('posts')

            return res
        },

        author: async () => {
            const trx = await trxProvider();
            let res = await trx('authors')
            return res
        }
    }
}

1.如何正确地解决这个事务?例如,当查询/变异完成时,如何调用trx.commit()以使连接不空闲?
1.事务处理是正确的方法吗?我应该使用什么样的knex功能,以便将单个数据库连接用于查询+变异?
回答这些问题都很棒。谢谢!

eoigrqb6

eoigrqb61#

连接池是首选方法。事务最好用于 Package 多个数据库 * 写入 *,以便所有写入可以一起提交或回滚。这避免了不一致的写入。我发现将事务用于 * 读取 * 没有任何优势。
我已经发布了一个tutorial,它涵盖了你需要用knex和GraphQL做的很多事情,希望你会发现它对你有帮助。

相关问题