Как использовать промежуточное ПО Express после промежуточного ПО Apollo-Server v2? - PullRequest
0 голосов
/ 12 февраля 2020

У меня есть это странное требование (потому что у меня нет ничего в inte rnet о том, как его использовать. Так что, думаю, это только я) при использовании Express и Apollo Server.

Я хочу использовать промежуточное ПО Express после использования промежуточного ПО сервера Apollo, но не могу.

Пример :

const { ApolloServer } = require('apollo-server-express');
const express = require('express')

const app = express();
const server = new ApolloServer({typedefs, resolvers})

app.use(...); // Middleware-1
app.use(...); // Middleware-2
app.use(server.getMiddleware()); // Apollo server middleware
app.use(...); // Middleware-3

app.listen({ port: 4000 }, () =>
  console.log(`? Server ready at http://localhost:4000${server.graphqlPath}`)
);

В приведенном выше коде Middleware-3 никогда не вызывается. Я много об этом искал, но ничего не получил.

Есть ли способ вызвать Middleware-3 после Промежуточное ПО сервера Apollo ?

Спасибо.


Редактировать: 1 Я забыл упомянуть, что не хочу изменять ответ от ApolloServer. У меня уже есть некоторые промежуточные программы Express, которые я не хочу реорганизовывать / модифицировать / писать совершенно новые, чтобы иметь возможность использовать их вместе с Apollo. Итак, есть ли какой-нибудь хакерский способ следовать порядку app.use() даже после промежуточного программного обеспечения ApolloServer?

Ответы [ 2 ]

1 голос
/ 13 февраля 2020

Вы можете попытаться назначить

res.end2 = res.end res.end = ()=>{} в любом промежуточном программном обеспечении, вызванном до ApolloMidleware, а затем вызвать res.end2 для ответа на отправку

0 голосов
/ 12 февраля 2020

Сервер Apollo вызывает res.end после отправки результатов выполнения вашего запроса GraphQL. Это завершает ответ, поэтому никакое другое промежуточное программное обеспечение не будет вызываться впоследствии.

Если вам нужно отформатировать ответ, вы можете использовать опции formatResponse или formatErrors, но вы не можете использовать Express промежуточное ПО.

...