Создание моего первого преобразователя регистров пользователей для 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.' }
Спасибо за вашу помощь.
@Mikkel - спасибо! когда я просто возвращаю ошибку, она не доходит до ответа.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


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