在 graphqlHTTP.Middleware 之后挂载中间件

zag*_*gen 5 middleware express graphql graphql-js express-graphql

我有一个关于express-graphql.\nI\xe2\x80\x99m 的问题,试图在 GraphQL 解析器之后运行中间件。

\n\n

这是我的前两次尝试:

\n\n
app.use('/api', graphqlHTTP({\n    schema: graphqlSchema\n  })\n);\n\napp.use((req, res, next) => {\n  console.log('middleware called');\n  next();\n});\n
Run Code Online (Sandbox Code Playgroud)\n\n

\n\n
app.use('/api', graphqlHTTP({\n    schema: graphqlSchema,\n    graphiql: true,\n  }), () => {\n      console.log('middleware called');\n  }\n);\n
Run Code Online (Sandbox Code Playgroud)\n\n

两者都\xe2\x80\x99t 工作。\n我猜express-graphql不是next()在某个地方打电话。

\n\n

消息来源似乎证实了这一点:

\n\n
type Middleware = (request: Request, response: Response) => void;\n
Run Code Online (Sandbox Code Playgroud)\n\n

next不是参数。

\n\n

我尝试了这个解决方法:

\n\n
app.use( (req, res, next) => {\n  req.on('end', () => {\n    console.log('middleware called');\n  });\n  next();\n});\n\napp.use('/api', graphqlHTTP({\n    schema: graphqlSchema\n  })\n);\n
Run Code Online (Sandbox Code Playgroud)\n\n

这确实有效。但在实际使用中我注意到,通过突变更改的数据在回调中尚不可用(即已更新)。如果我将代码包装在 a 中,setTimeout数据就会更新。

\n\n

底线:如何让中间件(或任何代码)在解析器之后运行?

\n