GraphQL - пользовательское сообщение об ошибке после ответа мутации - PullRequest
0 голосов
/ 19 января 2020

Я использую 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 Ответ

1 голос
/ 19 января 2020
} catch (error) {
    // If member exists throw new error
    return JSON.parse(error.response.text).title;
}

Вы не можете просто вернуть простой ответ - похожий на нормальный, а не на ошибку.

Обработка ошибок подробно описана на сервере apollo docs

...