我们定义了一个ApolloClient,它有两个ApolloLink,连接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
});
提前谢谢。
不幸的是,ApoloLink.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,
});