Я использую 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"
]
}
]
}