如何实现每个graphql请求的事务

问题描述 投票:0回答:1

我正在尝试设置 Apollo GraphQL 服务器,并通过 Prisma 访问 Postgresql 后端。

我想要一个“1 个客户端请求”-“1 个数据库事务”,即使 GraphQL 请求包含一系列例如突变。

我的感觉是 Apollo GraphQL 上下文和 Prisma 交互式事务的结合应该使这成为可能,但我想知道是否有人知道实现这一点的简单示例(我在选项和类型中迷失了......),或者是否有更好的解决方案可以实现 1 req/1 txn 方法,这也是我感兴趣的学习

欢迎任何指点或提示

大量发送!

彼得

graphql prisma apollo-server
1个回答
0
投票

我设法通过使用包装在 Prisma 交互式事务中的 Apollo graphql 函数并从快速处理程序调用它来解决这个问题。

app.post('/gql2', async (req, res) => {
    const { query, variables } = req.body;
    try {
        const result = await prismaClient.$transaction(async (tx) => {
            return await graphql({
                schema,
                source: query,
                variableValues: variables,
                contextValue: tx,
            });
        });
        res.json(result);
    } catch (error:any) {
        console.error(error);
        res.status(500).send(error.message);
    }
});

在解析器中,可以轻松获取 Prisma tx 并将其用于所有数据库访问

不确定我是否可以不用节点快速绕道,但就像现在一样,似乎没问题

彼得

© www.soinside.com 2019 - 2024. All rights reserved.