如何将请求正文传递到 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.body
是undefined
,除非你使用额外的body-parser 中间件。来自 Express 文档:
req.body
包含在请求正文中提交的数据键值对。默认情况下,它是未定义的,并且在您使用 body-parser 和 multer 等正文解析中间件时填充。 http://expressjs.com/en/api.html#req.body
graphqlHTTP
正在做自己的事情来解析请求正文(请参阅here),这就是您的查询/突变有效的原因。
添加中间件(如 body-parser 或 multer)来解析请求正文应使其在 req.body
上可用,然后您的上下文应填充您正在寻找的内容。
【讨论】:
以上是关于如何将请求正文传递到 GraphQL 上下文中?的主要内容,如果未能解决你的问题,请参考以下文章
如何将图像文件传递到 Flutter 中的 Http 请求(POST)正文?