Конфигурационный паттерн Nestjs - PullRequest
0 голосов
/ 20 ноября 2018

Я пытаюсь выяснить, как работает «Шаблон репозитория» TypeOrm в Nest. Я хотел бы иметь файл resources, в котором local и удаленный файл содержат различные объекты, контроллеры, модули и т. Д. См. Скриншот

enter image description here

Когда приложение собирается, я получаю следующую ошибку:

[Nest] 3186   - 11/19/2018, 10:44:43 PM   [ExceptionHandler] No repository for "Project" was found. Looks like this entity is not registered in current "default" connection? +1ms

Из документации Nest и TypeORM я могу триангулировать, что я должен сообщить приложению, где оно может найти сущности, или, по крайней мере, это то, что, как я полагаю, пытается сообщить мне ошибка.

Я использую .env, чтобы вытащить конфигурацию для TypeORM в:

TYPEORM_CONNECTION = postgres
TYPEORM_HOST = localhost
TYPEORM_USERNAME = xyz
TYPEORM_PASSWORD = xyz
TYPEORM_DATABASE = xyz
TYPEORM_PORT = 5432
TYPEORM_SYNCHRONIZE = true
TYPEORM_LOGGING = true
TYPEORM_ENTITIES = src/server/**/**.entity{.ts,.js}

app.module.ts

import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { AngularUniversalModule } from './modules/angular-universal/angular-universal.module';
import { JiraService } from './services/jira.service'
// modules
import { ProjectModule } from './resources/local/project/project.module'
// sync
import {ProjectsSync} from './sync/projects.sync'

@Module({
  imports: [
    ProjectModule,
    TypeOrmModule.forRoot(),
    AngularUniversalModule.forRoot(),
  ],
  controllers: [],
  providers:[JiraService, ProjectsSync],
})
export class ApplicationModule {}

project.module.ts

import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { ProjectService } from './project.service';
import { ProjectController } from './project.controller';
import { Project } from './project.entity';

@Module({
  imports: [TypeOrmModule.forFeature([Project])],
  providers: [ProjectService],
  controllers: [ProjectController],
})
export class ProjectModule {}

project.service.ts

import { Injectable, Inject } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { Project } from './project.entity';

@Injectable()
export class ProjectService {
  constructor(
    @InjectRepository(Project)
    private readonly projectRepository: Repository<Project>,
  ) {}

  async findAll(): Promise<Project[]> {
    return await this.projectRepository.find();
  }
}

project.entity.ts

import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';

@Entity()
export class Project {
  @PrimaryGeneratedColumn()
  id: number;

  @Column({ length: 500 })
  name: string;
}

project.controller.ts

import { Controller, Get } from '@nestjs/common';
import { ProjectService } from './project.service';
import { Project } from './project.entity';

@Controller('project')
export class ProjectController {
  constructor(private readonly projectService: ProjectService) {}

  @Get()
  findAll(): Promise<Project[]> {
    return this.projectService.findAll();
  }
}

1 Ответ

0 голосов
/ 20 ноября 2018

Просто дикое предположение, вы пробовали:

TYPEORM_ENTITIES = ./server/**/**.entity{.ts,.js}

И / или переключение импорта в app.module.ts, сначала помещая TypeOrmModule:

@Module({
  imports: [
    TypeOrmModule.forRoot(),
    ProjectModule,
    AngularUniversalModule.forRoot(),
  ],
  controllers: [],
  providers:[JiraService, ProjectsSync],
})
export class ApplicationModule {}
...