Как мне указать DATABASE_URL в ormconfig.json? - PullRequest
0 голосов
/ 02 января 2019

Я пытаюсь развернуть свой сервер Vesper на Heroku, а для Vesper требуется файл ormconfig.json.

Это прекрасно работает, когда я использую свою локальную базу данных, потому что я могу заполнить все поля, которые будут объединены в строку подключения. Однако, когда я добавляю БД в Heroku, я просто получаю полный URL-адрес и не могу найти, где его разместить.

Это мой ormconfig.json прямо сейчас.

{
  "type": "postgres",
  "host": "localhost",
  "port": 5432,
  "username": "postgres",
  "password": "password",
  "database": "test",
  "synchronize": true,
  "entities": ["target/entity/**/*.js"],
  "migrations": ["target/migrations/*.js"],
  "cli": {
    "migrationsDir": "src/migrations"
  }
}

Я надеюсь, что смогу заменить большинство полей только базой данных_url, но я не могу найти документацию с указанием того, под каким именем я должен его поставить.

1 Ответ

0 голосов
/ 03 января 2019

Вы можете использовать парсер URL для разбора heroku env, например pg-connection-string https://www.npmjs.com/package/pg-connection-string

Затем вы используете функцию createConnection, заданную TypeOrm, для инициализации TypeOrm на стороне сервера.

import * as PostgressConnectionStringParser from "pg-connection-string";

const databaseUrl: string = process.env.DATABASE_URL;
const connectionOptions = PostgressConnectionStringParser.parse(databaseUrl);
const typeOrmOptions: PostgresConnectionOptions = {
    type: "postgres",
    name: connectionOptions.name,
    host: connectionOptions.host,
    port: connectionOptions.port,
    username: connectionOptions.username,
    password: connectionOptions.password,
    database: connectionOptions.database,
    synchronize: true,
    entities: ["target/entity/**/*.js"],
    extra: {
        ssl: true
    }
};
const connection = createConnection(typeOrmOptions);
...

Если вы управляете различными конфигурациями, вам, вероятно, придется изменить этот фрагмент, чтобы можно было включить / отключить ssl, например, в зависимости от среды (нет ssl в режиме dev, ts-node выбирает объекты в формате .ts и т. Д.). .).

Если вам действительно нужно сгенерировать ormconfig.json, то я боюсь, что вам нужно сгенерировать файл из файла сценария с прежним кодом, просто добавьте запись для записи:

...
const json = JSON.stringify(typeOrmOptions, null, 2);
fs.writeFile("./target/ormconfig.json", json, (err) => {
    if (err) {
        console.error(err);
        return;
    }
    console.log("File has been created");
});
...