Изменить структуру ответа GraphQL - PullRequest
0 голосов
/ 04 июня 2019

У меня есть проект GraphQL и Express с этими существующими маршрутами:

// ...

const graphiqlExpress = require('graphql-server-express').graphiqlExpress;
const graphqlExpress = require('graphql-server-express').graphqlExpress;
const makeExecutableSchema = require('graphql-tools').makeExecutableSchema;

// ...

const schema = makeExecutableSchema({
  typeDefs,
  resolvers,
});

// ...

app.use('/graphql', bodyParser.json(), graphqlExpress({ schema }));
app.use(
  '/graphiql',
  graphiqlExpress({
    endpointURL: '/graphql',
  })
);

Мои результаты после GET на http://localhost:3030/graphql?query={regions(countries:["FR"],level:0){...} выглядят как обычный ответ GraphQL:

{
  "data": {
    "regions": [
      {
        "type": "FeatureCollection",
        "features": [
          ...
          ...
        ]
      }
    ]
  }
}

ЕстьЕсть ли способ преобразовать ответ в нечто более похожее на действительный формат GeoJSON?(без " data: {} " и без названия моего запроса и т. д.), например:

{
  "type": "FeatureCollection",
    "features": [
      ...
      ...
    ]  
}

То, о чем я уже думал, это либо использование middleare (но как?) И / или нормализатор, такой как graphql-normalizr (но я не знаю, как подключить его к Express)

1 Ответ

0 голосов
/ 06 июня 2019

После нескольких часов поисков влево и вправо я нашел жизнеспособное решение.К счастью, есть formatResponse, который вы можете использовать: https://github.com/apollographql/apollo-server/blob/master/packages/apollo-server-core/src/graphqlOptions.ts#L43

Обновленный код выглядит так:

app.use(
  '/graphql',
  bodyParser.json(),
  graphqlExpress({ schema, formatResponse: res => (res.data.regions && res.data.regions[0]) || res })
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...