Typeorm подключиться к нескольким базам данных - PullRequest
0 голосов
/ 16 февраля 2019

Я использую node.js, TS и typeorm для внутреннего проекта.

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

ormconfig

[
  {
    "name": "default",
    "type": "postgres",
    "host": "localhost",
    "port": 5432,
    "username": "postgres",
    "password": "12345",
    "database": "dbOne"
  },
  {
    "name": "second-connection",
    "type": "postgres",
    "host": "localhost",
    "port": 5432,
    "username": "postgres",
    "password": "12345",
    "database": "dbTwo"
  }
]

Это мои настройки соединения.После этого я пытаюсь подключиться к промежуточному программному обеспечению.

   const connectionOptions = await getConnectionOptions("second-connection");
   const conTwo = await createConnection(connectionOptions);

   const managerTwo = getManager("second-connection");

   const resultTwo = await managerTwo
      .createQueryBuilder(SysCompany, "company")
      .getOne();

   console.log(resultTwo);

Я думаю, что могу подключиться к базе данных, но у меня проблемы с хранилищем.

Ошибка

EntityMetadataNotFound: Метаданные для "SysCompany" не найдены.

@Entity()
export class SysCompany extends CoreEntityWithTimestamp {

  @Column({ length: 100 })
  name: string;

  // FK
  // SysPersonnel
  @OneToMany(type => SysPersonnel, personnel => personnel.sysCompany)
  sysPersonnels: SysPersonnel[];

}

1 Ответ

0 голосов
/ 20 марта 2019

Возможно, typeORM не может найти вашу сущность JavaScript.У меня была эта проблема некоторое время назад.Вы можете сделать следующее:

  • Проверить папку назначения после создания проекта.Ваш SysCompany.js доступен?
  • Установите свойство entities в конфигурации.Он должен содержать путь к вашим объектам JS.Документы typeORM утверждают, что «каждая сущность должна быть зарегистрирована в ваших параметрах подключения».
{
 "name": "second-connection",
 "type": "postgres",
 "host": "localhost",
 "port": 5432,
 "username": "postgres",
 "password": "12345",
 "database": "dbTwo"
 "entities": ["<path to entities>/**/*.js"]
}

Я также рекомендовал бы использовать файл конфигурации JavaScript.Ваш ormconfig.js может затем использовать __dirname (имя каталога текущего модуля), чтобы установить путь.Поэтому, если ваши каталоги выглядят так:

project/ormconfig.js
project/dist/entity/SysCompany.js
project/dist/entity/OtherEntity.js

Вы можете использовать конфигурацию, подобную этой:

import {join} from "path";
...
  entities: [
    join(__dirname, "dist/entity/**/*.js")
  ],
...

Вы также можете предотвратить дублирование, используя базовый объект конфигурации.

import {join} from "path";

const baseOptions = {
  type: "postgres",
  host: "localhost",
  port: 5432,
  username: "postgres",
  password: "12345",
  entities: [
    join(__dirname, "dist/entity/**/*.js")
  ]
}

const defaultConfig = Object.assign({
  name: "default",
  database: "dbOne",
}, baseOptions);

const secondConfig = Object.assign({
  name: "second-connection",
  database: "dbTwo",
}, baseOptions);

module.exports = [ defaultConfig, secondConfig ];

В файле, в котором вы открываете соединение, вы можете использовать импорт:

import { secondConfig } from "<path to file>/ormconfig";

const conTwo = await createConnection(secondConfig);
...