node.js - GraphQL,1-1关系突变

标签 node.js graphql graphql-js prisma prisma-graphql

我正在尝试使用 NodeJS 和 Prisma 实现我自己的 GraphQL 后端。

目前,我只有两种简单的类型:

用户:

type User {
    id: ID! @unique
    email: String!
    address: Address! @relation(name:"UserAddress")
}

地址:

type Address {
    id: ID! @unique
    name: String!
    user: User! @relation(name:"UserAddress")
}

还有一个简单的突变,用于创建一个用户,解决方法是:

async signup(parent, {email}, ctx, info) {
   return ctx.db.mutation.createUser({
      data: {email},
   })
}

但这不起作用,因为在创建用户时,我省略了它的地址。我知道我应该在数据中添加一个带有该用户 ID 的地址字段,但因为我们正在创建它,所以我们现在无法访问它。如何解决这个问题? (我希望这可以在服务器中完成,如果可能的话,通过保留 ! 和原子性,否则可以分成 2 个突变,如果这是技巧的话?)。

最好。

最佳答案

如果您不打算在创建新用户时始终提供地址,我建议您将地址字段设置为可选。否则,无论您采取多少步骤以及执行速度有多快,潜在的查询总是会返回错误。

TBH,我什至不明白为什么你希望它是必需的。我确信您可以不填写,或者,如果确实是强制性的,您应该“强制”用户在注册时/之后填写这些详细信息。但仍然在架构中将其保留为可选。

如果您在注册时要求提供地址信息,在我看来,有两种方法可以实现。不管怎样,仍然会有一个解析器。是的,您可以根据需要标记地址字段

  1. 如果您将地址与其余用户信息保存在同一个文档中,那么事情就很简单,您只需在一个查询中将所有内容写入数据库即可。
  2. 如果地址用户是单独的实体,仍然是单个解析器,但涉及更多步骤,您也可以通过两种方式进行处理:

    • 您保存用户,等待响应获取id,将user_id字段添加到地址并保存。保存地址后,您需要通过添加address_id字段来更新用户

    • 如果您使用mongodb,那么您绝对没有理由不自己生成这些 ID。使用new ObjectId(),在需要的地方添加它们,然后保存用户地址。这样您也可以返回乐观的响应,或者只是等待两个操作完成。

关于node.js - GraphQL,1-1关系突变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48510990/

相关文章:

javascript - GraphQL:从兄弟解析器访问另一个解析器/字段输出

mysql - 使用 Base64 和 Node.js 显示图像

node.js - 为什么我本应失败的超测却通过了?

graphql - 如何使用模式语言创建泛型?

javascript - GraphQL 无法解析嵌套对象属性

github - 使用 GitHub GraphQL API v4 查询单个存储库中的所有提交

使用先前突变返回结果的graphql多次突变?

node.js - 在 NodeJS 中读取第 N 行文件

node.js - 对象不存在-Mongodb

graphql - 如何根据PageQuery的结果获取Gatsby Images?