私はnestjsプロジェクトで働くようにtypeormを取り入れることを試みる楽しい問題があります。
私のプロジェクトを設定するための以下のコードがあります、はい、すべてロードされ、はい、私はデータベースに接続することができます。
import { CacheModule, Module } from '@nestjs/common';
import { JwtModule } from '@nestjs/jwt';
import { PassportModule } from '@nestjs/passport';
import { TypeOrmModule } from '@nestjs/typeorm';
import { User } from './entities/user.entity';
import { ConfigModule } from '@nestjs/config';
import { AuthenticationController } from './controllers/authentication.controller';
import { AuthenticationService } from './services/authentication.service';
import { Connection } from 'typeorm';
import { BaseEntity } from './entities/base.entity';
@Module({
imports: [
ConfigModule.forRoot(),
TypeOrmModule.forRoot({
type: 'postgres',
Host: 'localhost',
port: 5432,
username: 'postgres',
password: process.env.POSTGRE_PASSWORD,
database: process.env.DATABASE,
migrationsTableName: 'migration_table',
entities: [User, BaseEntity],
migrations: [__dirname + '/migrations/**/*.ts'],
subscribers: [__dirname + '/subscribers/**/*.ts'],
cli: {
entitiesDir: '/entitys',
migrationsDir: '/migrations',
subscribersDir: '/subscribers',
},
synchronize: true,
autoLoadEntities: true,
}),
CacheModule.register(),
PassportModule,
JwtModule.register({
secret: 'myprivatekey',
signOptions: { expiresIn: '1d' },
}),
],
controllers: [AuthenticationController],
providers: [AuthenticationService],
})
export class AppModule {
constructor(private connection: Connection) {}
}
_
そしてここにエンティティがあります:
import {
Column,
BeforeUpdate,
BeforeInsert,
} from 'typeorm';
export class BaseEntity {
@Column()
created_at: Date;
@Column({
default: new Date(),
})
updated_at: Date;
@BeforeUpdate()
updateUpdatedAt() {
this.updated_at = new Date();
}
@BeforeInsert()
updateCreatedAt() {
this.created_at = new Date();
}
}
_
import {
Entity,
Column,
PrimaryGeneratedColumn,
Generated,
} from 'typeorm';
import { BaseEntity } from './base.entity';
@Entity('users')
export class User extends BaseEntity {
@PrimaryGeneratedColumn()
id: number;
@Column()
@Generated('uuid')
uuid: string;
@Column()
first_name: string;
@Column()
last_name: string;
@Column()
email: string;
@Column()
password: string;
@Column({
default: false,
})
confirmed: boolean;
@Column({
default: null,
})
seller_id: string;
@Column({
default: null,
})
auth_token: string;
@Column({
default: false,
})
is_admin: boolean;
}
_
私はもともとグロブパターンの一致をしていました。また、上記のエラーの前にすべてのモジュールが読み込まれ、エラーがAuthenticationControllerまたはAdminControllerのいずれかで@InjectRepository()デコレータを使用することの通りです。私のエンティティがロードされていないため、私が見た至る所では、それはそれを言っています。ありがとう。
あなたがあなたのエンティティのデコレータの前に@サインを置くことを確認してください(私のエンティティの3つの3つは私の魅力が見つからなかったので、エラーメッセージは関係に関連していました)
ソースコードを読むとき、私は文字列がまだそこにあることを認識しました、それですべてのファイルがそれの中にあるだけではなく、App.Moduleの中で直接モデルをインポートしようとしました。エンティティ配列に文字列やパターンを渡さないでくださいが、代わりにインポートされたエンティティクラスは魅力のように機能しました。
与えられた、これは、インポート内のパスをさまざまなモジュールに書き込み、それらを1つずつインポートする必要があるため、最もクリーンなアプローチではない可能性があります。これを洗練された解決策を達成できるように、他の人がこれを取り組んで改善する方法について他の人が何を言わなければならないのかを見ることは素晴らしいでしょう。
これは今日では2021年11月現在です。