У вас есть (как минимум) две возможности.
- Вы можете создать ConnectionOptions в машинописи, используя переменную окружения DATABASE_URL. Вам не нужны хост, имя пользователя, порт, пароль, база данных, если у вас есть URL-адрес, на самом деле вы должны удалить их, потому что они перезаписывают параметры вашего URL-адреса. См. Здесь: https://typeorm.io/# / параметры подключения / postgres - параметры подключения cockroachdb
url - URL-адрес подключения, к которому выполняется подключение. Обратите внимание, что другие параметры подключения будут переопределять параметры, установленные из URL.
Например, вот так:
import { getConnectionOptions, ConnectionOptions } from 'typeorm';
import dotenv from 'dotenv';
dotenv.config();
const getOptions = async () => {
let connectionOptions: ConnectionOptions;
connectionOptions = {
type: 'postgres',
synchronize: false,
logging: false,
extra: {
ssl: true,
},
entities: ['dist/entity/*.*'],
};
if (process.env.DATABASE_URL) {
Object.assign(connectionOptions, { url: process.env.DATABASE_URL });
} else {
// gets your default configuration
// you could get a specific config by name getConnectionOptions('production')
// or getConnectionOptions(process.env.NODE_ENV)
connectionOptions = await getConnectionOptions();
}
return connectionOptions;
};
const connect2Database = async (): Promise<void> => {
const typeormconfig = await getOptions();
await createConnection(typeormconfig);
};
connect2Database().then(async () => {
console.log('Connected to database');
});
На heroku вы можете получить учетные данные базы данных в настройках аддона или, конечно же, из URL. Таким образом, вы можете написать ormconfig. json для heroku с этими учетными данными.
{
"name": "default",
"type": "postgres",
"url: "postgres://username:password@hostname:5432/databasename"
"synchronize": false,
"logging": true,
"entities": ["src/entity/*.*"]
}
Мне больше нравится первый вариант, потому что URL-адрес может измениться на heroku, и вам не придется ничего делать в вашем коде / config-файлах.