为了账号安全,请及时绑定邮箱和手机立即绑定

如何扩展 GraphQL 调用的上下文对象?

如何扩展 GraphQL 调用的上下文对象?

GCT1015 2021-10-14 16:44:25
我在标准模块中有以下 GraphQL 服务器调用:export default () => {    return graphqlHTTP({        schema: schema,        graphiql: true,        pretty: true,        formatError: error => ({            message: error.message,            locations: error.locations,            stack: error.stack,            path: error.path        })    });};与护照一起使用:app.use(    "/graphql",    passport.authenticate("jwt", { session: false }),    appGraphQL());一切都是工作文件。Passport 扩展了 myreq以获取在我的 GraphQL 调用查询或更改时使用的已记录用户对象:...    resolve(source, args, context) {        console.log("CURRENT USER OBJECT")        console.log(context.user)...一切都很好。现在我需要扩展我的上下文以添加一些自定义解析器,所以我的第一次尝试是:export default () => {    return graphqlHTTP({        schema: schema,        graphiql: true,        pretty: true,        context: resolvers,        formatError: error => ({            message: error.message,            locations: error.locations,            stack: error.stack,            path: error.path        })    });};正如 GraphQL 文档所说,这会覆盖原始的 req 上下文,并且 my context.useron 查询和突变停止工作。如何正确扩展当前上下文以添加更多字段,而不是覆盖它?另一个不成功的尝试:export default (req) => {    return graphqlHTTP({        schema: schema,        graphiql: true,        pretty: true,        context: {            user: req.user,            resolvers: resolvers        },        formatError: error => ({            message: error.message,            locations: error.locations,            stack: error.stack,            path: error.path        })    });};这种方法不起作用......我收到以下错误:  user: req.user,                ^TypeError: Cannot read property 'user' of undefined
查看完整描述

1 回答

?
慕的地10843

TA贡献1785条经验 获得超8个赞

假设您使用的是express-graphql,graphqlHTTP是一个函数,它接受一些配置参数并返回一个快速中间件函数。通常,它是这样使用的:


app.use(

  '/graphql',

  graphqlHTTP({ ... })

)

但是,graphqlHTTP 也可以采用返回对象的函数,而不是对象,如docs所示。


app.use(

  '/graphql',

  graphqlHTTP((req, res, graphQLParams) => {

    return { ... }

  })

)

通过这种方式,您可以在配置对象中使用req,res或graphQLParams参数。


app.use(

  '/graphql',

  graphqlHTTP((req, res, graphQLParams) => {

    return {

      schema,

      // other options

      context: {

        user: req.user,

        // whatever else you want

      }

    }

  })

)


查看完整回答
反对 回复 2021-10-14
  • 1 回答
  • 0 关注
  • 161 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信