使用Typeorm和Grapqhl的多个端点

时间:2019-04-06 10:23:45

标签: graphql apollo-server typeorm

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,则另一个可以工作并转到我想要的数据库,但是我不想每次都这样做,我想在同一服务器上为它们中的每一个分配一个端点。 ..

1 个答案:

答案 0 :(得分:0)

第一-来自文档:

  

不同连接的连接名称不能相同-它们都必须唯一。

2nd:我没有在您的代码中看到将显式连接传递给每个GraphQLServer。

可以使用中间件为每个端点正确设置connectionName。这也可以在解析器中完成。与使用解析器中的共享功能相比,使用中间件是更优雅/通用的解决方案。

然后在解析器中,您可以在getConnection(connectionName).manger.find...中使用连接名称