簡體   English   中英

無法在 Nest.js 框架中將 TypeORM 連接到 Heroku Postgres 數據庫

[英]Fail to connect TypeORM to Heroku Postgres database in Nest.js framework

我在嘗試將 Nest.js API 連接到數據庫時遇到問題。 當我使用本地數據庫時工作正常。

我的數據庫部署在 Heroku 服務器上,我可以使用 pgadmin 訪問它。

我正在使用帶有 .env 文件的 TypeORM 進行配置。

.env 示例:

NODE_TLS_REJECT_UNAUTHORIZED=0

TYPEORM_CONNECTION=postgres
TYPEORM_HOST=***
TYPEORM_USERNAME=***
TYPEORM_PASSWORD=***
TYPEORM_DATABASE=***
TYPEORM_PORT=5432
TYPEORM_DRIVER_EXTRA='{"ssl":true}'
TYPEORM_SYNCHRONIZE=false
TYPEORM_ENTITIES=dist/**/*.entity.js
TYPEORM_MIGRATIONS=dist/v1/migration/*.js
TYPEORM_MIGRATIONS_DIR=src/v1/migration
TYPEORM_MIGRATIONS_RUN=true

運行 npm run start:dev cmd 返回此錯誤

[Nest] 14998   - 2020-04-01 17:02:42   [TypeOrmModule] Unable to connect to the database. Retrying (1)... +712ms
QueryFailedError: syntax error at or near "`"
    at new QueryFailedError (/home/primeradiant/Documents/hitema/agorise/projet/easymove-api/node_modules/typeorm/error/QueryFailedError.js:11:28)
    at Query.callback (/home/primeradiant/Documents/hitema/agorise/projet/easymove-api/node_modules/typeorm/driver/postgres/PostgresQueryRunner.js:176:38)
    at Query.handleError (/home/primeradiant/Documents/hitema/agorise/projet/easymove-api/node_modules/pg/lib/query.js:138:19)
    at Connection.connectedErrorMessageHandler (/home/primeradiant/Documents/hitema/agorise/projet/easymove-api/node_modules/pg/lib/client.js:223:17)
    at Connection.emit (events.js:210:5)
    at TLSSocket.<anonymous> (/home/primeradiant/Documents/hitema/agorise/projet/easymove-api/node_modules/pg/lib/connection.js:120:12)
    at TLSSocket.emit (events.js:210:5)
    at addChunk (_stream_readable.js:308:12)
    at readableAddChunk (_stream_readable.js:289:11)
    at TLSSocket.Readable.push (_stream_readable.js:223:10)

我不知道錯誤是否是由於錯誤的憑據引起的。 有可能我沒明白一點。 謝謝您的幫助

編輯:問題來自將 TYPEORM_MIGRATIONS_RUN 設置為 true,如果我將其設置為 false,則 api 構建成功

或者來自自動遷移生成的查詢文件

import {MigrationInterface, QueryRunner} from "typeorm";

export class BaseHistory1584471283256 implements MigrationInterface {

    public async up(queryRunner: QueryRunner): Promise<any> {
        await queryRunner.query("DROP INDEX `IDX_97672ac88f789774dd47f7c8be` ON `users`");
        await queryRunner.query("CREATE TABLE `history` (`id` int NOT NULL AUTO_INCREMENT, `price` varchar(255) NOT NULL, `departure_station` varchar(255) NOT NULL, `created_at` datetime NOT NULL DEFAULT NOW(), `userId` varchar(255) NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB");
        await queryRunner.query("ALTER TABLE `users` DROP COLUMN `createdAt`");
        await queryRunner.query("ALTER TABLE `users` DROP COLUMN `updatedAt`");
        await queryRunner.query("ALTER TABLE `users` ADD `created_at` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6)");
        await queryRunner.query("ALTER TABLE `users` ADD `updated_at` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6)");
        await queryRunner.query("ALTER TABLE `users` ADD UNIQUE INDEX `IDX_97672ac88f789774dd47f7c8be` (`email`)");
        await queryRunner.query("ALTER TABLE `history` ADD CONSTRAINT `FK_7d339708f0fa8446e3c4128dea9` FOREIGN KEY (`userId`) REFERENCES `users`(`id`) ON DELETE CASCADE");
    }

    public async down(queryRunner: QueryRunner): Promise<any> {
        await queryRunner.query("ALTER TABLE `history` DROP FOREIGN KEY `FK_7d339708f0fa8446e3c4128dea9`");
        await queryRunner.query("ALTER TABLE `users` DROP INDEX `IDX_97672ac88f789774dd47f7c8be`");
        await queryRunner.query("ALTER TABLE `users` DROP COLUMN `updated_at`");
        await queryRunner.query("ALTER TABLE `users` DROP COLUMN `created_at`");
        await queryRunner.query("ALTER TABLE `users` ADD `updatedAt` datetime(6) NOT NULL DEFAULT 'CURRENT_TIMESTAMP(6)'");
        await queryRunner.query("ALTER TABLE `users` ADD `createdAt` datetime(6) NOT NULL DEFAULT 'CURRENT_TIMESTAMP(6)'");
        await queryRunner.query("DROP TABLE `history`");
        await queryRunner.query("CREATE INDEX `IDX_97672ac88f789774dd47f7c8be` ON `users` (`email`)");
    }

}

Postgres 無法將 ` 識別為有效的字符串字符。 相反,應該使用' 您可以在此處閱讀有關 postgres 字符串的更多信息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM