1 - 我有来自2个不同客户端的2个相同数据库,唯一改变的是存储的数据,因此我可以使用相同的grapqhl架构连接到每个客户端,一切正常。
2 - 我想启动一个单一服务器并获得每个端点的Typeorm连接。例如:Database1 - 端点:'/ graphql1'Ex:Database2 - 端点:'/ graphql2'
我得到了一些通过中间件的建议,但我无法做到......
3 - 我使用grpahql-yoga作为服务器。
//Database 1 from ormconfig.json
export const createTypeormGraphql1 = async () => {
const connectionOptions = await getConnectionOptions('database1')
return createConnection({
...connectionOptions,
name: 'default',
})
}
//Database 2 from ormconfig.json
export const createTypeormGraphql2 = async () => {
const connectionOptions = await getConnectionOptions('database2')
return createConnection({
...connectionOptions,
name: 'default',
})
}
export const startServer = async () => {
const schemas: //...CODE
// Graphql1 Server
await createTypeormGraphql1()
const serverGraphql1 = new GraphQLServer({
schema: mergeSchemas({ schemas }),
})
const options1 = {
port: process.env.PORT || 4000,
playground: '/play1',
endpoint: '/graphql1',
}
await serverGraphql1.start(options1)
// Graphql2 Server
await createTypeormGraphql2()
const serverGraphql2 = new GraphQLServer({
schema: mergeSchemas({ schemas }),
})
const options2 = {
port: process.env.PORT || 4000,
playground: '/play2',
endpoint: '/graphql2',
}
await serverGraphql2.start(options2)
}
startServer()
使用此代码,如果注释掉serverGraphql1或serverGraphql2,另一个工作并转到我想要的数据库,但我不想每次都这样做,我想在同一服务器上为每个端点分配一个端点...
第1名 - 来自docs:
不同连接的连接名称不能相同 - 它们都必须是唯一的。
第二:我没有在你的代码中看到显式连接到每个GraphQLServer。
中间件可用于为每个端点获得正确的connectionName
。这也可以在解析器中完成。使用中间件比使用解析器中的共享功能更优雅/通用解决方案。
然后在解析器中,您可以在getConnection(connectionName).manger.find...
中使用连接名称