5

我有一个关于express-graphql. 我正在尝试在 GraphQL 解析器之后运行中间件。

这是我的前两次尝试:

app.use('/api', graphqlHTTP({
    schema: graphqlSchema
  })
);

app.use((req, res, next) => {
  console.log('middleware called');
  next();
});

app.use('/api', graphqlHTTP({
    schema: graphqlSchema,
    graphiql: true,
  }), () => {
      console.log('middleware called');
  }
);

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

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

type Middleware = (request: Request, response: Response) => void;

next不是参数。

我尝试了这种解决方法:

app.use( (req, res, next) => {
  req.on('end', () => {
    console.log('middleware called');
  });
  next();
});

app.use('/api', graphqlHTTP({
    schema: graphqlSchema
  })
);

它有点工作。但在实际使用中,我注意到,由突变改变的数据在回调中尚不可用(即已经更新)。如果我将代码包装在 asetTimeout中,则数据将被更新。

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

4

0 回答 0