Apolloclient с более чем 2 ApolloLinks

Мы определили ApolloClient с двумя ApolloLinks, подключенными к MongoDB и PostgreSQL, и он отлично работает:

      const firstLink = new HttpLink({
  uri: 'graphql-postgre',
  //headers: yourHeadersHere,
  // other link options...
});
const secondLink = new HttpLink({
  uri: 'graphql-mongodb',
  //headers: yourHeadersHere
  // other link options...
});


const client = new ApolloClient({
 link: ApolloLink.split(
 o => o.getContext().clientName === "mongo", 
 secondLink, 
 firstLink // by default -> postgre)
 ),
 cache: new InMemoryCache(),
 fecthOptions: {
 mode: 'no-cors'
 },
 shouldBatch: true
});

Теперь нам нужно добавить новую ссылку, чтобы иметь доступ к новой базе данных (Neo4J), но мы не можем найти ни одного примера и не знаем, можно ли использовать более двух источников. Мы пробовали следующий код, пытаясь включить некоторую логику во вторую ссылку, но он работает не так, как мы ожидали. Мы получаем информацию по первой и второй ссылке, но не по третьей:

      const thirdLink = new HttpLink({
  uri: 'graphql-neo4j',
  //headers: yourHeadersHere
  // other link options...
});

const client = new ApolloClient({
  link: ApolloLink.split(
    o => o.getContext().clientName === "mongo", 
    secondLink, 
      (o => o.getContext().clientName === "neo", 
      thirdLink,
      firstLink) // by default -> postgre)
  ),
  cache: new InMemoryCache(),
  fecthOptions: {
    mode: 'no-cors'
  },
  shouldBatch: true
});

Заранее спасибо.

1 ответ

к сожалению, ApolloLink.split допускает только 2 варианта, но вы все равно можете обойти это ограничение, используя этот подход.

      const client = new ApolloClient({
link: ApolloLink.split(
(o) => o.getContext().clientName === 'mongo',
secondLink,
ApolloLink.split((o) => o.getContext().clientName === 'neo',
  thirdLink,
  firstLink)
), // by default -> postgre)
cache: new InMemoryCache(),
fecthOptions: {
mode: 'no-cors',
},
shouldBatch: true,
});
Другие вопросы по тегам