Как сделать prehandler сервера apollo - PullRequest
0 голосов
/ 07 апреля 2020

Есть ли способ добавить prehandler для сервера apollo, чтобы из prehandler я мог выдать ошибку, которую apollo поймает и отправит как ответ в формате apollo? Или, может быть, есть помощник для форматирования ошибки для ответа?

Как мне это сделать с помощью специального помощника getGqlErr, который получит существующую ошибку или сгенерирует ее:

onst apolloHandler = apolloServer.createHandler({ path: '/api/graphql' })

const apiHandler = async (req: NextApiRequest, res: NextApiResponse): Promise<void> => {
  try {
    await prehandler({ req, res } as Ctx)
  } catch (e) {
    res.setHeader('Content-Type', 'application/json')
    res.end(
      JSON.stringify({
        errors: [
          {
            message: 'Prehandler Error',
            extensions: {
              langsMsg: getGqlErr(e),
              code: 'prehandler custom error',
            },
          },
        ],
      })
    )
    return
  }

  apolloHandler(req, res)
}

1 Ответ

0 голосов
/ 10 апреля 2020

Это можно сделать в контекстной функции.

const apolloServer = new ApolloServer({
  schema,
  formatError: (err): any => {
    console.log(err)
    return err
  },
  async context(ctx: Ctx): Promise<Ctx> {
    await prehandler(ctx)

    return ctx
  },
})
...