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

Node.js GraphQL-突变响应后的自定义错误消息,node.js,error-handling,graphql,apollo-server,mutation,Node.js,Error Handling,Graphql,Apollo Server,Mutation,我正在忍受Graphql,我有一个问题,我不能再进一步了 在后端(nodeJS)中,您可以输入新闻稿列表,它可以正常工作。 如果电子邮件地址已经存在,Mailchimp将返回“成员存在”。到目前为止一切都很好 如果我理解正确,答案必须是相应类型的格式。 如果注册不起作用,我现在想发布一条自定义消息 那么,我必须如何调整正确的响应并发送自定义消息呢 突变: createNewsletterSubscription( data: CreateNewsletterSubscriptionInp

我正在忍受Graphql,我有一个问题,我不能再进一步了

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

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

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

突变:

createNewsletterSubscription(
    data: CreateNewsletterSubscriptionInput
): NewsletterSubscription!
和类型:

type NewsletterSubscription {
email: String!
name: String!
}

给出“成员存在”的响应:

突变方法:

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"
      ]
    }
  ]
}
您不能只返回简单的响应—看起来像正常响应,而不是错误响应


阿波罗服务器上详细解释了处理错误

谢谢。这个答案对我有帮助。我找到了一个用graphql方式编辑错误消息的解决方案;)
{
  "data": null,
  "errors": [
    {
      "message": "Cannot return null for non-nullable field NewsletterSubscription.email.",
      "locations": [
        {
          "line": 3,
          "column": 5
        }
      ],
      "path": [
        "createNewsletterSubscription",
        "email"
      ]
    }
  ]
}
} catch (error) {
    // If member exists throw new error
    return JSON.parse(error.response.text).title;
}