如何将请求正文传递到 GraphQL 上下文中?

Posted

技术标签:

【中文标题】如何将请求正文传递到 GraphQL 上下文中?【英文标题】:How to pass request body into GraphQL Context? 【发布时间】:2016-09-16 19:22:02 【问题描述】:

我目前正在尝试将请求正文放入上下文中,因为正文的一部分包含需要解码的 JWT。但是,当我尝试以下操作时,我的上下文未定义:

    app.use('/', graphqlHTTP((req) => (
      schema: Schema,
      context: req.body,
      pretty: true,
      graphiql: false
    )));

我注销了 req,但我没有在其中看到 body。我正在使用一个名为 react-reach 的库,它在请求的正文中添加了以下内容:

    
      query: ...,
      queryParams: ...,
      options: 
       token: '...' // <-- I'm passing the token into options
      
    

我知道正文正在被解释,因为我在正文中的查询/突变正在被解释和执行。只是在传递给上下文时似乎找不到它。

【问题讨论】:

我觉得如果将令牌放在标头中会容易得多,然后你可以这样做:docs.apollostack.com/apollo-server/tools.html#auth-tokens(Apollo Server 只是 Express-GraphQL 的一个薄包装器) 我试试看,@stubailo 这工作@stubailo 【参考方案1】:

你的req.bodyundefined,除非你使用额外的body-parser 中间件。来自 Express 文档:

req.body

包含在请求正文中提交的数据键值对。默认情况下,它是未定义的,并且在您使用 body-parser 和 multer 等正文解析中间件时填充。 http://expressjs.com/en/api.html#req.body

graphqlHTTP 正在做自己的事情来解析请求正文(请参阅here),这就是您的查询/突变有效的原因。

添加中间件(如 body-parser 或 multer)来解析请求正文应使其在 req.body 上可用,然后您的上下文应填充您正在寻找的内容。

【讨论】:

以上是关于如何将请求正文传递到 GraphQL 上下文中?的主要内容,如果未能解决你的问题,请参考以下文章

将上下文从 Web 请求的控制器传递到数据库层

如何将用户输入的值传递到 c# 中的请求参数正文中?

Relay 和 GraphQL 中的身份验证

如何将图像文件传递到 Flutter 中的 Http 请求(POST)正文?

如何将 json 列表传递给 Flutter 中的 http 请求(post)正文?

如何将 GraphQL 查询中的数据传递到以编程方式生成的页面上?