1-我有来自2个不同客户端的2个相等的数据库,唯一更改的是存储的数据,因此我可以使用相同的grapqhl模式连接到每个数据库,并且一切正常。
2-我想启动一个单服务器并获得到每个端点的Typeorm连接。 例如:Database1-端点:'/ graphql1' 例如: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,则另一个可以工作并转到我想要的数据库,但是我不想每次都这样做,我想在同一服务器上为它们中的每一个分配一个端点。 ..
答案 0 :(得分:0)
第一-来自文档:
不同连接的连接名称不能相同-它们都必须唯一。
2nd:我没有在您的代码中看到将显式连接传递给每个GraphQLServer。
可以使用中间件为每个端点正确设置connectionName
。这也可以在解析器中完成。与使用解析器中的共享功能相比,使用中间件是更优雅/通用的解决方案。
然后在解析器中,您可以在getConnection(connectionName).manger.find...
中使用连接名称