微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将请求传递到函数中生成的 Apollo Server 上下文中

如何解决将请求传递到函数中生成的 Apollo Server 上下文中

学习 GraphQL 并且有点坚持将 req 传递到我为保持整洁而制作的生成上下文函数中。

我想我对 createContext((req) => req) 行做了一些愚蠢的事情,好像我在路由处理程序中 console.log( ctx.request ) 我得到 [Function (anonymous)]

从 server.ts 范围捕获 this.req 并将其传递给 createContext 的替代方法是什么?

server.ts

import { ApolloServer } from 'apollo-server'
import { schema } from './nexusSchema'
import { createContext } from './context'

const server = new ApolloServer({
  schema,context: createContext((req) => req),})

server.listen().then(({ url }) => {
  console.log(`?  Server ready at ${url}`)
})

context.ts

import { prismaClient,prisma as prismaTypes } from '@prisma/client'
import { prismaDelete,onDeleteArgs } from '@paljs/plugins'
import { PubSub } from 'apollo-server'

class prisma extends prismaClient {
  constructor(options?: prismaTypes.prismaClientOptions) {
    super(options)
  }

  async onDelete(args: onDeleteArgs) {
    const prismaDelete = new prismaDelete(this)
    await prismaDelete.onDelete(args)
  }
}

const prisma = new prisma()
const pubsub = new PubSub()

export interface Context {
  prisma: prisma
  select: any
  pubsub: PubSub
  request: {
    request: {
      headers: {
        authorization: string
      }
    }
    connection: {
      context: {
        Authorization: string
      }
    }
  }
}

export function createContext(req): Context {
  return {
    prisma,select: {},pubsub,request: req,}
}

解决方法

毕竟我是个笨蛋。

注意,我还必须调整请求对象的接口以适应 Apollo Server 2!

server.ts

const server = new ApolloServer({
  schema,context: createContext,})

context.ts

export interface Context {
  prisma: Prisma
  select: any
  pubsub: PubSub
  request: {
    req: {
      headers: {
        authorization: string
      }
    }
    connection: {
      context: {
        Authorization: string
      }
    }
  }
}

export const createContext = (req): Context => {
  return {
    prisma,select: {},pubsub,request: req,}
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。