【问题标题】:unexpected token 'export' when using typeorm in heroku在 Heroku 中使用 typeorm 时出现意外的令牌“导出”
【发布时间】:2020-03-26 03:59:44
【问题描述】:

我正在关注this 线程,了解如何让 TypeORM 和 PostgreSQL 在 Heroku 中工作。

使用ormconfig.jsmodule.exports 我得到这个错误

MissingDriverError: Wrong driver: "undefined" given. Supported drivers are: "cordova", "expo", "mariadb", "mongodb", "mssql", "mysql", "oracle", "postgres", "sqlite", "sqljs", "react-native".
const env = require('dotenv')
env.config()

module.exports = {
  name: 'default',
  type: process.env.DATABASE_TYPE,
  host: process.env.DATABASE_HOST,
  port: 5432,
  username: process.env.DATABASE_USERNAME,
  password: process.env.DATABASE_PASSWORD,
  database: process.env.DATABASE_NAME,
  synchronize: true,
  dropSchema: false,
  logging: true,
  entities: ['/src/**/*.entity.ts', 'dist/**/*.entity.js'],
  extra: {
    ssl: true,
  },
};

上面的链接说切换到.ts并使用export

所以..使用ormconfig.tsexport = config 我得到这个错误:

2020-03-25T05:07:57.946988+00:00 app[web.1]: export = config
2020-03-25T05:07:57.946988+00:00 app[web.1]: ^^^^^^
2020-03-25T05:07:57.946988+00:00 app[web.1]: 
2020-03-25T05:07:57.946989+00:00 app[web.1]: SyntaxError: Unexpected token 'export'

const config = {
  name: 'default',
  type: process.env.DATABASE_TYPE,
  host: process.env.DATABASE_HOST,
  port: 5432,
  username: process.env.DATABASE_USERNAME,
  password: process.env.DATABASE_PASSWORD,
  database: process.env.DATABASE_NAME,
  synchronize: true,
  dropSchema: false,
  logging: true,
  entities: ['/src/**/*.entity.ts', 'dist/**/*.entity.js'],
  extra: {
    ssl: true,
  },
};

export = config;

我也尝试过使用export default,但出现与导出相同的错误...

不完全确定从这里去哪里...有人遇到过这个问题吗?

是否需要包含 babel 才能在 heroku 中运行我的 node.js 应用程序?

【问题讨论】:

    标签: node.js postgresql heroku nestjs typeorm


    【解决方案1】:

    这样做可以摆脱 (2020-03-25T05:07:57.946989+00:00 app[web.1]: SyntaxError: Unexpected token 'export') 错误:

    exports.config = {
      name: 'default',
      type: process.env.DATABASE_TYPE,
      host: process.env.DATABASE_HOST,
      port: 5432,
      username: process.env.DATABASE_USERNAME,
      password: process.env.DATABASE_PASSWORD,
      database: process.env.DATABASE_NAME,
      synchronize: true,
      dropSchema: false,
      logging: true,
      entities: ['/src/**/*.entity.ts', 'dist/**/*.entity.js'],
      extra: {
        ssl: true,
      },
    };
    

    【讨论】:

    • 按照这种方法,我得到了上面提到的MissingDriverError
    • 我可以看看您在其中创建数据库连接的示例代码吗?
    • 在 TypeORM 中,如果有一个名为 ormconfig 的文件,则 typeorm 将其用作数据库连接文件。我唯一要做的另一件事是在我的app.module.ts 中调用TypeOrmModule.forRoot()
    • 你在 Heroku 中设置了环境变量DATABASE_TYPE 吗? Heroku 默认给出一个DATABASE_URL,如果你不只是将 URL 传递给你的数据库连接器,你必须手动解析它的正确部分
    • @JayMcDoniel 是的,我在 heroku 的变量部分设置了 DATABASE_TYPE 变量。我还注意到tsconfig.json 包括ormconfig.js 而不是.ts 所以我改变了我认为解决了我遇到的问题的那个?现在转到 Heroku 找不到 app/dist/main.js 的下一个问题
    【解决方案2】:

    ormconfig 必须保留 .js 扩展名。

    此外,我正在从 Heroku 解析 DATABASE_URL,并将所有变量添加到 ormconfig 中的相应占位符中,如下所示:

    const parse = require('pg-connection-string').parse;
    const env = require('dotenv')
    env.config()
    
    const config = parse(process.env.DATABASE_URL)
    
    const pgConnection  = {
      type: "postgres",
      host: config.host,
      port: config.port,
      username: config.user,
      password: config.password,
      database: config.database,
      synchronize: true,
      dropSchema: false,
      logging: true,
      entities: ['/src/**/*.entity.ts', 'dist/**/*.entity.js'],
      extra: {
        ssl: true,
      }
    }
    
    module.exports = pgConnection;
    

    【讨论】:

      猜你喜欢
      • 2021-06-22
      • 2021-02-18
      • 2018-11-24
      • 1970-01-01
      • 2018-03-16
      • 2020-12-23
      • 1970-01-01
      • 2020-12-30
      • 1970-01-01
      相关资源
      最近更新 更多