gpt4 book ai didi

graphql - 为 GraphQL Yoga 提供的 Prisma 声明字段的正确方法,但在解析器中不需要

转载 作者:行者123 更新时间:2023-12-04 01:52:45 26 4
gpt4 key购买 nike

我一直试图在 Prisma 网站上找到一些关于此的文档,但说实话,在那里找到非常详细的用例有点困难,尤其是当问题与这个问题一样难以描述时。

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

在我的 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 时,我发现了该字段 createdAt !在这两个地方。

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

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

尽管这个问题似乎有点具体,但我相信在创建节点之前应该可以在服务器上为字段创建数据的想法,但目前我正在努力思考如何做到这一点。

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

最佳答案

好的,经过大量尝试不同策略的工作后,我终于尝试将字段名称从 createdAt 更改为至 createdDate现在可以使用了。

当我浏览 Playground 时,我发现 createdAt是 Prisma 本身在请求对查询进行排序时使用的半隐藏 protected 字段。它可以在 orderBy 下找到在 Arguments 列表中选择单个数据条目。

错误信息 Reason: 'createdAt' Field 'createdAt' is not defined in the input type 'PostingCreateInput'.当然,我并没有以任何方式指出正确的方向。

TLDR;问题是我正在命名我的字段 createdAt这是一个 protected 字段名称。

关于graphql - 为 GraphQL Yoga 提供的 Prisma 声明字段的正确方法,但在解析器中不需要,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52173791/

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