Несколько конечных точек с помощью Typeorm и Grapqhl - PullRequest
0 голосов
/ 06 апреля 2019

1 - у меня есть 2 равные базы данных от 2 разных клиентов, единственное, что меняется, это сохраненные данные, поэтому я могу подключиться к каждому из них с помощью одной и той же схемы grapqhl, и все работает.

2 - Я хочу запустить ОДИН СЕРВЕР и получить соединение Typeorm с каждой конечной точкой. Пример: База данных1 - конечная точка: '/ graphql1' Пример: База данных2 - конечная точка: '/ 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 голосов
/ 06 апреля 2019

1-й - из документов:

Имена соединений для разных соединений не могут быть одинаковыми - все они должны быть уникальными.

2-й: я не вижу в вашем коде явной связи с каждым GraphQLServer.

Промежуточное программное обеспечение можно использовать для получения connectionName для каждой конечной точки. Это можно сделать и в резольверах. Использование промежуточного программного обеспечения является более элегантным / универсальным решением, чем использование совместно используемой функции в распознавателях.

Тогда в резольверах вы можете использовать имя соединения в getConnection(connectionName).manger.find...

...