Node.js Nestjs存储库模式配置挑战

Node.js Nestjs存储库模式配置挑战,node.js,typescript,nestjs,Node.js,Typescript,Nestjs,我试图弄清楚Nest中TypeOrm的“存储库模式”是如何工作的。我想要一个资源文件,其中一个本地和一个远程文件包含不同的实体、控制器、模块等。请参见屏幕截图 当应用程序正在构建时,我收到以下错误: [Nest] 3186 - 11/19/2018, 10:44:43 PM [ExceptionHandler] No repository for "Project" was found. Looks like this entity is not registered in curre

我试图弄清楚Nest中TypeOrm的“存储库模式”是如何工作的。我想要一个
资源
文件,其中一个
本地
和一个远程文件包含不同的实体、控制器、模块等。请参见屏幕截图

当应用程序正在构建时,我收到以下错误:

[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
从我可以三角化的和类型化文档中,我必须告诉应用程序在哪里可以找到实体,或者至少这是我认为错误试图告诉我的

我正在使用
.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 {}
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.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 {}
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.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();
  }
}
从'@nestjs/common'导入{Controller,Get};
从“/project.service”导入{ProjectService};
从“./Project.entity”导入{Project};
@控制器(“项目”)
导出类ProjectController{
构造函数(私有只读项目服务:项目服务){}
@得到()
承诺{
返回此.projectService.findAll();
}
}

只是一个猜测,您是否尝试过:

TYPEORM_ENTITIES = ./server/**/**.entity{.ts,.js}
和/或切换app.module.ts中的导入,将TypeOrmModule放在第一位:

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

在.env文件中进行更改

TYPEORM_ENTITIES=src/server/**/**.entity{.ts、.js}

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

在你的app.module中使用:

const typeOrmConfig: TypeOrmModuleOptions = {
    type: process.env.TYPEORM_CONNECTION,
    host: process.env.TYPEORM_HOST,
    port: process.env.TYPEORM_PORT,
    username: process.env.TYPEORM_USERNAME,
    password: process.env.TYPEORM_PASSWORD,
    database: process.env.TYPEORM_DATABASE,
    synchronize: process.env.TYPEORM_SYNCHRONIZE,
    logging: process.env.TYPEORM_LOGGING,
    entities: [__dirname + process.env.TYPEORM_ENTITIES]
}

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

由于需要解析
dist
src
中的实体,因此无法正确运行node(而不是ts node)。就我个人而言,我更喜欢使用工厂方法来实例化TypeOrm连接,这样我就可以根据env(以及在代码中解析来自env文件的其他道具)更改此路径。