我有一个关于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
中,则数据将被更新。
底线:如何让中间件(或任何代码)在解析器之后运行?