Typeorm和Grapqhl的多个端点

问题描述 投票:0回答:1

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

graphql apollo-server typeorm
1个回答
0
投票

第1名 - 来自docs:

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

第二:我没有在你的代码中看到显式连接到每个GraphQLServer。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.