Apollo Server Express: слишком большой объект запроса - PullRequest
1 голос
/ 25 сентября 2019

Мне нужно поместить большую полезную нагрузку в мутацию GraphQL.Как мне увеличить ограничение на размер тела сервера Apollo?

Я использую apollo-server-express версия 2.9.3.

Мой код (упрощенно):

const myGraphQLSchema = new GraphQLSchema({
  query: new GraphQLObjectType({
    name: 'Query',
    fields: {
      user: UserQuery,
    },
  }),
  mutation: new GraphQLObjectType({
    name: 'Mutation',
    fields: () => ({
      ...UserMutations,
    }),
  }),
});

const apolloServer = new ApolloServer(schema: myGraphQLSchema);

const app = express();
app.use(apolloServer.getMiddleware({ path: '/graphql' });

1 Ответ

1 голос
/ 25 сентября 2019

Просто добавьте синтаксический анализатор тела Express перед промежуточным программным обеспечением сервера Apollo:

import { json } from 'express';

app.use(json({ limit: '2mb' });
app.use(apolloServer.getMiddleware({ path: '/graphql' });

Если вы хотите выглядеть модно, у вас может быть отдельный лимит размера тела для аутентифицированных и неаутентифицированных запросов:

const jsonParsers = [
  json({ limit: '16kb' }),
  json({ limit: '2mb' }),
];

function parseJsonSmart(req: Request, res: Response, next: NextFunction) {
  // How exactly you do auth depends on your app
  const isAuthenticated = req.context.isAuthenticated();
  return jsonParsers[isAuthenticated ? 1 : 0](req, res, next);
}

app.use(parseJsonSmart);
app.use(apolloServer.getMiddleware({ path: '/graphql' });
...