Обработка ошибок Express.js с сервером GraphQl Apollo - PullRequest
0 голосов
/ 27 февраля 2019

Я работаю с открытым исходным кодом, в котором я реализовал обработку ошибок для всех возможных сценариев (ошибки разработчика / эксплуатации)

Например, ошибки асинхронной обработки / ожидания обрабатываются с помощью оболочки:

const asyncMiddleware = fn => (req, res, next) =>
  Promise.resolve(fn(req, res, next)).catch(err => {
    if (!err.isBoom) return next(boom.badImplementation(err));
    next(err);
  });

Внутренние ошибки передаются в next Более подробная информация о том, как я реализовал обработку ошибок, доступна здесь

Теперь, когда я добавил GraphQl с ApolloServer и Prisma, я могу использовать async мутации.Однако, что я заметил, так это то, что если обернуть асинхронную функцию описанной выше оболочкой asyncMiddleware и выдать ошибку из await, площадка GraphQl покажет ошибку типа, а не фактическую ошибку.Я хочу, чтобы в таких случаях происходил сбой сервера, однако этого не происходит, поскольку ошибки просто не доходят до моего пользовательского обработчика ошибок, где я проверяю, есть ли ошибка isDeveloper, и выхожу из процесса.Чтобы передать ошибки в пользовательский обработчик ошибок, мне нужно иметь доступ к функции next.

Я пытался передать next в контекст при инициализации ApolloServer:

context: (req, res, next )

, но, похоже, это не работает.По крайней мере, передавая ошибки в context.next(err) Я по-прежнему получаю сообщение об ошибке типа в GraphQl Playground, и сервер не падает.

...