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

How to pass request body into GraphQL Context?

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

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

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

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

我知道 body 正在被解释,因为 body 中的 queries/mutations 正在被解释和执行。传递给上下文时似乎找不到它。

您的 req.bodyundefined 除非您使用额外的正文解析器中间件。来自 Express 文档:

req.body

Contains key-value pairs of data submitted in the request body. By default, it is undefined, and is populated when you use body-parsing middleware such as body-parser and multer. http://expressjs.com/en/api.html#req.body

graphqlHTTP 正在做自己的事情来解析请求正文(请参阅 here),这就是您的 queries/mutations 工作的原因。

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