mysql - NestJS typeorm - エンティティを作成できない
TypeOrm(MySQLに設定済み)にIdeaエンティティを追加しようとしているのですが、インポートがうまく動作しないようです。ファイルを追加すると、typeormが正常に初期化されません。
私はtypeormパッケージを再インストールしましたが、どこからデバッグを始めればいいのか全くわかりません。私はチュートリアル(https://www.youtube.com/watch?v=EHlhvy-fh90)を見ながら進めていますが、このエラーはそのチュートリアルでは発生しません。このチュートリアルからは、postgresqlデータベースをdockerで動かしているmysqlに置き換えるという点で逸脱しています。
ノード -> MySQL 接続の設定でいくつか問題があり、最終的には認証エラーに対応するために Docker 化された MySQL 5 を実行することにしました(この回答に従って: https://stackoverflow.com/a/50167617/9043642)。idea.entity.ts ファイルがない場合、接続は(ORM を使って)通るので、データベース自体には問題がないと考えられます。
これは私の idea.entity.ts ファイルの内容です。実際には、ドキュメント(https://docs.nestjs.com/techniques/database)にある例に従っています。コピーして貼り付けても、ドキュメントの例は同じエラーを出します。
import {
Entity,
PrimaryGeneratedColumn,
Column,
CreateDateColumn,
} from 'typeorm';
@Entity()
export class IdeaEntity {
@PrimaryGeneratedColumn('uuid') id:string;
@CreateDateColumn() created:Date;
@Column('text') idea:string;
@Column('text') description:string;
}
実行中に次のエラーが発生しています
[Nest] 14034 - 07/02/2019, 1:00 PM [TypeOrmModule] Unable to connect to the database. Retrying (1)... +19ms
[0] /home/miko/node/ideas/src/idea/idea.entity.ts:2
[0] import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';
[0] ^
[0]
[0] SyntaxError: Unexpected token {
[0] at Module._compile (internal/modules/cjs/loader.js:718:23)
[0] at Object.Module._extensions..js (internal/modules/cjs/loader.js:785:10)
[0] at Module.load (internal/modules/cjs/loader.js:641:32)
[0] at Function.Module._load (internal/modules/cjs/loader.js:556:12)
[0] at Module.require (internal/modules/cjs/loader.js:681:19)
[0] at require (internal/modules/cjs/helpers.js:16:16)
[0] at Function.PlatformTools.load (/home/miko/node/ideas/node_modules/typeorm/platform/PlatformTools.js:107:28)
[0] at /home/miko/node/ideas/node_modules/typeorm/util/DirectoryExportedClassesLoader.js:30:69
[0] at Array.map (<anonymous>)
[0] at Object.importClassesFromDirectories (/home/miko/node/ideas/node_modules/typeorm/util/DirectoryExportedClassesLoader.js:30:10)
特に、データベース接続が失敗します。再度、エンティティが存在しない場合は接続は正常です。期待される結果は [InstanceLoader] TypeOrmCoreModule dependencies initialized です。このようなエンティティをどのようにして正常に作成できますか?
回答 #1
結局、ormconfig.json ファイルが混乱した状態になってしまいました。次のフォーマットに従っていることを確認してください: https://github.com/nestjs/nest/blob/master/integration/typeorm/ormconfig.json
回答 #2
エンティティのパスを dist フォルダとして追加してください
{
"type":"postgres",
"host":"localhost",
"port":"5432",
"username":process.env.USERNAME,
"password":process.env.PASSWORD,
"database":process.env.DATABASE,
"synchronize":true,
"logging":true,
"entities": ["dist/**/**.entity{.ts,.js}"]
}
