【发布时间】:2021-03-28 02:50:04
【问题描述】:
在客户端捕获服务器错误。我正在传递一个带有 Apollo 错误的对象,我从中读取出了问题所在。我在整个项目中一直在使用这种方法,它工作正常,但由于某种原因,在这个特定的例子中,它没有。我没有做任何不同的事情,但是有效负载不存在。
服务器代码:
const { UserInputError } = require('apollo-server-express');
const commentResolver = {
Mutation: {
createComment: async (_, { postID, body }, context) => {
const user = checkAuth(context);
// empty error object I fill with messages and pass it with the error
const errors = {};
try {
if (body.trim() === '') {
errors.body = 'Comments must not be empty';
throw new UserInputError('Empty comment', { errors });
}
// ...more code
客户端代码:
const [submitComment] = useMutation(CREATE_COMMENT, {
variables: {
postID,
body: comment,
},
onError: (err) => {
console.log(err.graphQLErrors[0].extensions.exception.errors); // prints undefined
setErrors(err.graphQLErrors[0].extensions.exception.errors);
},
仅打印 err 对象时得到的结果: no errors field in it
【问题讨论】:
-
可能您正在寻找自定义错误(或格式,请参阅文档)...检查此特定错误源是否可以传递其他变量,可能只使用字段指向参数跨度>
-
文档说它允许“错误扩展对象的任意字段为客户端提供额外的上下文”,他们提供的代码与此相同。 :|
-
注意,您的回复不包含
"code": "BAD_USER_INPUT"...其他配置的错误处理/屏蔽/格式化? ...检查具体错误实现/源代码,而不是示例的来源
标签: graphql apollo apollo-client