GraphQL - 突变响应后的自定义错误消息

Posted

技术标签:

【中文标题】GraphQL - 突变响应后的自定义错误消息【英文标题】:GraphQL - custom error message after mutation response 【发布时间】:2020-05-05 15:57:05 【问题描述】:

我正在学习 Graphql,但我遇到了一个无法进一步解决的问题。

在后端(nodeJS)中,您可以输入时事通讯列表,它可以正常工作。 如果电子邮件地址已经存在,Mailchimp 将返回“成员存在”。到目前为止一切都很好。

如果我理解正确,答案必须是相应类型的格式。 如果注册不起作用,我现在想发出自定义消息。

那么,我必须如何继续调整正确的响应并发送自定义消息?

突变:

createNewsletterSubscription(
    data: CreateNewsletterSubscriptionInput
): NewsletterSubscription!

还有类型:

type NewsletterSubscription 
email: String!
name: String!

回复给我“会员存在”:

JSON.parse(error.response.text).title

变异方法:

async createNewsletterSubscription(parent, args,  db , info) 
    const  name, email  = args.data;
    const newEmailSubscription = 
        email,
        name,
    ;

    const FNAME = name;

    try 
        const result = await request
            .post(  `https://$mailchimpInstance.api.mailchimp.com/3.0/lists/$MAILCHIMP_LIST_ID/members`
            )
            .set(
                'Authorization',
                // eslint-disable-next-line no-buffer-constructor
                `Basic $new Buffer(`any:$MAILCHIMP_APIKEY`).toString(
                    'base64'
                )`
            )
            .send(
                email_address: email,
                status: 'subscribed',
                merge_fields: 
                    FNAME,
                ,
            );

        if (result.status === 200 && result.body.status === 'subscribed') 
            return newEmailSubscription;
        
     catch (error) 
        // If member exists throw new error
        return JSON.parse(error.response.text).title;
    
,

这是我的 GraphQL Playgrund 中的输出:


  "data": null,
  "errors": [
    
      "message": "Cannot return null for non-nullable field NewsletterSubscription.email.",
      "locations": [
        
          "line": 3,
          "column": 5
        
      ],
      "path": [
        "createNewsletterSubscription",
        "email"
      ]
    
  ]

【问题讨论】:

【参考方案1】:
 catch (error) 
    // If member exists throw new error
    return JSON.parse(error.response.text).title;

您不能只返回简单的响应 - 看起来像正常响应,而不是错误。

处理错误在阿波罗服务器docs有详细说明

【讨论】:

谢谢。这个答案对我有帮助。我找到了以 graphql 方式编辑错误消息的解决方案;)

以上是关于GraphQL - 突变响应后的自定义错误消息的主要内容,如果未能解决你的问题,请参考以下文章

GraphQL 突变中的自定义类型

如何在 GraphQL 中处理错误并发送响应

GraphQL 查询/突变的响应

使用来自突变解析器的 GraphQL Yoga 响应自定义 HTTP 代码

AWS Amplify + Graphql + Dynamodb:突变时出现 ConditionalCheckFailedException 错误

如何使用 graphene-django 定义突变的自定义输出类型?