我应该如何在ormconfig.json中指定DATABASE_URL?

时间:2019-01-02 12:53:28

标签: typescript heroku typeorm

我正在尝试将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"
  }
}

我希望我可以仅用database_url替换大多数字段,但找不到任何文件说明我应该使用的名称。

1 个答案:

答案 0 :(得分:0)

您可以将URL解析器用于heroku env var解析,例如pg-connection-string https://www.npmjs.com/package/pg-connection-string

然后,使用TypeOrm提供的createConnection函数在服务器端初始化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,ts-node提取.ts格式的实体等)来启用/禁用ssl。 )。

如果您确实需要生成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");
});