Невозможно выдать ошибки в ApolloServer, отклонение необработанного обещания при обнаружении ошибки в Cognito

Создание моего первого преобразователя регистров пользователей для GraphQL API.

У меня возникают проблемы с получением ответа об ошибке от Cognito API, когда я нажимаю его из преобразователя.

Журнал ошибок выглядит так и будет соответствовать приведенному ниже коду преобразователя.

{ data: { registerUser: null } }
error is here
{ code: 'UsernameExistsException',
  name: 'UsernameExistsException',
  message: 'An account with the given email already exists.' }
error is here
{ code: 'UsernameExistsException',
  name: 'UsernameExistsException',
  statusCode: 400,
  message: '400' }

Я убедился в следующем: - Решатель попадает из песочницы и клиента. - Я настроил ApolloServer на форматирование ответов и ошибок.

КОНФИГУРАЦИОННЫЙ КОД

const server = new ApolloServer({
typeDefs: [rootSchema, ...schemaTypes],
resolvers: merge({}, user),
async context({ req }) {
  const user = await authenticate(req)
  return { user }
},
formatResponse: response => {
        console.info(response);
        return response;
 },
formatError: error => ({
         message: error.message,
     state: error.originalError && error.originalError.state,
        locations: error.locations,
        path: error.path,
    })

});

const registerUser = (_, args, ctx) => {
var attributeList = [];
console.info('args')
console.info(args)

var params = {
    ClientId: "config.clientId",
    Password: args.user.password,
    Username: args.user.username,
    UserAttributes: attributeList
}
    userPool.signUp(args.user.email, args.user.password, attributeList, null, function(err, result){
        if (err) {
            console.info('error is here')
            console.info(err);
            throw new Error(err.message);
        }

        if (result) {
            console.info('result is here')
            console.info(result)
            cognitoUser = result.user;

        }

    }).catch(function(error) {
        console.info('error is below');
        console.info(error);
        return error;
    })

}

Две вещи мешают мне двигаться вперед. Когда я опускаю блок catch в обещании userPool, я просто не получаю никакой ошибки, ошибка не возникает изнутри функции signUp.

Если я вообще выдаю какую-либо ошибку из моего преобразователя (будь то обратный вызов или блок catch), я получаю следующую ошибку.

at process._tickCallback (internal/process/next_tick.js:160:7)
(node:28342) UnhandledPromiseRejectionWarning: Unhandled promise 
rejection. This error originated either by throwing inside of an async 
function without a catch block, or by rejecting a promise which was not 
handled with .catch(). (rejection id: 1)
(node:28342) [DEP0018] DeprecationWarning: Unhandled promise rejections 
are deprecated. In the future, promise rejections that are not handled 
will terminate the Node.js process with a non-zero exit code.

Я хочу, чтобы в песочницу / запросчик возвращалась следующая ошибка

{ data: { registerUser: null } }
error is here
{ code: 'UsernameExistsException',
  name: 'UsernameExistsException',
  message: 'An account with the given email already exists.' }

Спасибо за вашу помощь.

Добро пожаловать в Stack Overflow. Я не думаю, что вам нужно выдавать ошибку, вы должны возвращать данные с кодом ошибки

Mikkel 29.12.2018 22:23

@Mikkel - спасибо! когда я просто возвращаю ошибку, она не доходит до ответа.

techromantic 29.12.2018 22:38
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
648
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Догадаться. API AWS ограничены реализацией обратного вызова. Оберните свой обратный вызов как обещание, а затем соедините это обещание по мере необходимости.

Другие вопросы по теме