首页 文章

正确的方式为GraphQL瑜伽提供的Prisma声明字段,但在解析器中不需要

提问于
浏览
2

我一直试图在Prisma网站上找到一些关于这方面的文档,但说实话,在那里找到非常详细的用例有点困难,特别是当这个问题很难描述时 .

我的情况是我的前端向我的GraphQL-Yoga服务器上的 createPosting 发送一个变异请求,字段为 positionTitle, employmentType, description, requirements, customId, expiresAt (我已经彻底测试了这是否按预期工作) . 我想在Prisma服务上创建节点之前添加 createdAt 字段 .

在我的GraphQL-Yoga服务器中,我有一个datamodel.graphql,其中包括以下内容:

type Posting {
  id: ID! @unique
  customId: String! @unique
  offeredBy: Employer!
  postingTitle: String!
  positionTitle: String!
  employmentType: EmploymentType!
  status: PostingStatus!
  description: String
  requirements: String
  applications: [Application!]!
  createdAt: DateTime!
  expiresAt: DateTime!
}

我的schema.graphql在Mutations下有这个:

createPosting(postingTitle: String!,
    positionTitle: String!,
    employmentType: String!,
    description: String!,
    requirements: String!,
    customId: String!,
    expiresAt: DateTime!,
    status: PostingStatus): Posting!

最后在我的createPosting解析器中,我试图像这样改变Prisma后端:

const result = await context.prisma.mutation.createPosting({
    data: {
      offeredBy: { connect: { name: context.req.name} },
      postingTitle: args.postingTitle,
      positionTitle: args.positionTitle,
      employmentType: args.employmentType,
      description: args.description,
      requirements: args.requirements,
      customId: args.customId,
      createdAt: new Date().toISOString(),
      expiresAt: expiresAt,
      status: args.status || 'UPCOMING'
    }
  })

当我尝试从我的前端运行它时,我在服务器上收到以下错误:

Error: Variable '$_v0_data' expected value of type 'PostingCreateInput!' but got: {"customId":"dwa","postingTitle":"da","positionTitle":"da","employmentType":"PART_TIME","status":"UPCOMING","description":"dada","requirements":"dadada","expiresAt":"2018-09-27T00:00:00.000Z","createdAt":"2018-09-04T20:29:10.745Z","offeredBy":{"connect":{"name":"NSB"}}}. Reason: 'createdAt' Field 'createdAt' is not defined in the input type 'PostingCreateInput'.

从这个错误消息我会假设我的Prisma服务由于某种原因不知道createdAt,因为我最近添加了这个字段,但当我检查Prisma主机上的GraphQL操场中的类型Posting和PostingCreateInput时,我发现该字段已创建!在这两个地方 .

我尝试删除生成的prisma.graphql并再次部署一个新文件,但这不起作用 . 当我检查prisma.graphql时,PostingCreateInput确实错过了createdAt字段,即使Prisma服务器似乎有它 .

如果有人能指出我正确的方向是什么问题,或者让我更好地了解如何设置应该存储在数据库中但在我的瑜伽服务器中创建的变量,而不是在前端我会非常感激:)

虽然这个问题可能看起来有点具体,但我相信在创建节点之前,应该可以在服务器上为字段创建数据的想法,但目前我正在努力绕过如何去做 .

TLDR;想要在我的Prisma服务发送创建请求之前在解析器上的GraphQL-Yoga服务器上创建 createdAt:DateTime 字段 .

1 回答

  • 3

    好吧,经过相当多的工作尝试不同的策略后,我终于尝试将字段的名称从 createdAt 更改为 createdDate ,现在可以正常工作了 .

    当我浏览游乐场时,我发现 createdAt 是Prisma本身在请求对查询进行排序时使用的半隐藏受保护字段 . 可以在Arguments列表中的 orderBy 选项下找到单个数据条目 .

    错误消息 Reason: 'createdAt' Field 'createdAt' is not defined in the input type 'PostingCreateInput'. 肯定没有以任何方式指向我正确的方向 .

    TLDR;问题是我在命名我的字段 createdAt 这是一个受保护的字段名称 .

相关问题