如何制作Apollo服务器预处理器

时间:2020-04-07 13:16:44

标签: apollo apollo-server

有没有一种方法可以为apollo服务器添加预处理程序,以便从预处理程序中引发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 :(得分:0)

可以在上下文函数中完成。

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

    return ctx
  },
})