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,
});