Node.js 继Apollo Server v2中间件之后,如何使用Express中间件?

Node.js 继Apollo Server v2中间件之后,如何使用Express中间件?,node.js,express,apollo-server,Node.js,Express,Apollo Server,在使用Express和Apollo Server时,我有一个奇怪的要求(因为我在互联网上没有关于如何使用它的信息。所以,我想只有我一个人) 在使用Apollo服务器中间件之后,我想使用Express中间件,但我不能 示例: const{ApolloServer}=require('apollo-server-express'); const express=require('express') 常量app=express(); const server=new ApolloServer({typ

在使用Express和Apollo Server时,我有一个奇怪的要求(因为我在互联网上没有关于如何使用它的信息。所以,我想只有我一个人)

在使用Apollo服务器中间件之后,我想使用Express中间件,但我不能

示例

const{ApolloServer}=require('apollo-server-express');
const express=require('express')
常量app=express();
const server=new ApolloServer({typedefs,resolvers})
应用程序。使用(…);//中间件-1
应用程序。使用(…);//中间件-2
app.use(server.getMiddleware());//阿波罗服务器中间件
应用程序。使用(…);//中间件-3
app.listen({port:4000},()=>
log(`Apollo Server在发送GraphQL请求的执行结果后调用。这将完成响应,因此之后不会调用其他中间件

如果需要格式化响应,可以使用
formatResponse
formatErrors
选项,但不能使用Express中间件。

您可以尝试分配

res.end2=res.end
res.end=()=>{}

在Apollo Midleware之前调用的任何中间件中,然后调用
res.end2
发送响应

我忘了提到我不想修改来自Apollo服务器的响应。我已经有一些Express中间件,我不想重构/修改/编写全新的中间件,以便能够与Apollo一起使用。那么,有没有其他中间件遵循
app.use()
顺序的黑客方法,即使在ApolloServer中间件之后也是如此?如果您没有修改响应,那么不太清楚为什么在之前而不是之后应用中间件会有所不同。但是要进入下一个中间件,我如何访问以及在哪里调用
next()
在Apollo中间件中?@unknownymouse:我提出了一个解决方案,但它是一种令人讨厌的黑客行为,不应该被使用