Le *_*con 10 node.js apollo graphql-js
我正在考虑实现同时包含错误和数据的 graphql 响应的方法。
是否可以在不创建包含error?
例如
MutationaddMembersToTeam(membersIds: [ID!]! teamId: ID!): [Member]将成员添加到某个团队。假设这种突变被称为有以下membersIds:[1, 2, 3]。
id为1和2的成员已经在团队中,所以必须抛出无法添加这些成员的错误,但应该添加id为3的成员,因为他不在团队中。
我正在考虑使用,formatResponse但似乎我无法在那里得到错误。
是否可以在不向返回类型添加错误字段的情况下解决此问题?
是否可以在不向返回类型添加错误字段的情况下解决此问题?
抱歉不行。
解析器可以返回数据,也可以返回 null 并抛出错误。它不能两者兼而有之。澄清一下,可能会得到部分响应和一些错误。一个简单的例子:
const typeDefs = `
type Query {
foo: Foo
}
type Foo {
a: String
b: String
}
`
const resolvers = {
Query: {
foo: () => {},
}
Foo: {
a: () => 'A',
b: () => new Error('Oops!'),
}
}
Run Code Online (Sandbox Code Playgroud)
在此示例中,查询两个字段foo将导致以下响应:
{
"data": {
"foo": {
"a": "A",
"b": null
}
},
"errors": [
{
"message": "Oops",
"locations": [
{
"line": 6,
"column": 5
}
],
"path": [
"foo",
"b"
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
通过这种方式,可以同时发回数据和错误。但是你不能在同一个领域这样做,就像你的问题一样。有几种方法可以解决这个问题。正如您所指出的,您可以将错误作为响应的一部分返回,这通常是这样做的。然后formatResponse,您可以使用、遍历结果数据、提取任何错误并将它们与任何其他 GraphQL 错误结合起来。不是最优的,但它可能会让你得到你正在寻找的行为。
另一种选择是修改突变,使其采用单个成员 ID。然后,您可以为要添加的每个 id 请求单独的更改:
add1: addMemberToTeam(memberId: $memberId1 teamId: $teamId): {
id
}
add2: addMemberToTeam(memberId: $memberId2 teamId: $teamId): {
id
}
add3: addMemberToTeam(memberId: $memberId3 teamId: $teamId): {
id
}
Run Code Online (Sandbox Code Playgroud)
这在处理客户端时可能会比较棘手,当然效率也较低,但同样可能会让您获得预期的行为。
| 归档时间: |
|
| 查看次数: |
7269 次 |
| 最近记录: |