slo*_*nzo 11 javascript apollo graphql react-apollo
我在使用Graphql和Apollo Client时遇到了麻烦.
当我使用REST时,我总是创建不同的响应,如401代码,但在这里我不知道如何做类似的行为.
当我得到响应时,我希望它转到catch函数.我在前面有这个代码:
client.query({
query: gql`
query TodoApp {
todos {
id
text
completed
}
}
`,
})
.then(data => console.log(data))
.catch(error => console.error(error));
Run Code Online (Sandbox Code Playgroud)
有谁能够帮我?
hel*_*fer 23
在GraphQL中返回错误的方法(至少在graphql-js中)是在resolve函数中抛出错误.由于HTTP状态代码特定于HTTP传输,而GraphQL不关心传输,因此您无法在那里设置状态代码.你可以做的是在你的解析函数中抛出一个特定的错误:
age: (person, args) => {
try {
return fetchAge(person.id);
} catch (e) {
throw new Error("Could not connect to age service");
}
}
Run Code Online (Sandbox Code Playgroud)
GraphQL错误会在响应中发送到客户端,如下所示:
{
"data": {
"name": "John",
"age": null
},
"errors": [
{ "message": "Could not connect to age service" }
]
}
Run Code Online (Sandbox Code Playgroud)
如果消息不是足够的信息,您可以为GraphQL服务器创建一个包含状态代码的特殊错误类.要确保状态代码包含在您的响应中,您必须formatError在创建中间件时指定该功能:
app.use('/graphql', bodyParser.json(), graphqlExpress({
schema: myGraphQLSchema,
formatError: (err) => ({ message: err.message, status: err.status }),
}));
Run Code Online (Sandbox Code Playgroud)
规范中最近增加了有关错误输出的信息:
GraphQL服务可以通过键扩展为错误提供附加条目。如果设置了该条目,则其值必须具有一个映射。此项保留给实现者,以将其他信息添加到错误中,但是他们认为合适,并且对其内容没有任何其他限制。
现在,extensions您可以使用该字段将机器可读信息定制为您的errors 条目:
{
"errors": [
{
"message": "Name for character with ID 1002 could not be fetched.",
"locations": [ { "line": 6, "column": 7 } ],
"path": [ "hero", "heroFriends", 1, "name" ],
"extensions": {
"code": "CAN_NOT_FETCH_BY_ID",
"timestamp": "Fri Feb 9 14:33:09 UTC 2018"
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
最新版本的Apollo-Server符合此功能的规范,请在此处查看。
| 归档时间: |
|
| 查看次数: |
9380 次 |
| 最近记录: |