0

I am new to NestJs and new to nodejs as well. I am trying to implement the following but getting error.

  1. I have few entities inside of an entity folder [see image]
  2. I have one repository folder which is having one custom repository, organizationRepository.ts like following
import { OrganizationEntity } from 'src/entity/organization.entity';
import { Repository } from 'typeorm';
import { EntityRepository } from 'typeorm';
@EntityRepository(OrganizationEntity)
export class OrganizationRepository extends Repository<OrganizationEntity> {
    findById(id: string): Promise<OrganizationEntity> {
        return this.findOne(id);
    }
}

and also having an repository.module.ts inside repository folder

import { Module } from '@nestjs/common';
import { OrganizationRepository } from './organizationRepository';
@Module({
    exports: [OrganizationRepository],
    providers: [OrganizationRepository],
})
export class RepositoryModule {}
  1. I have one dao folder which is having one file OrganizationDao.ts like following
import { Inject, Injectable } from '@nestjs/common';
import { OrganizationEntity } from 'src/entity/organization.entity';
import { OrganizationRepository } from 'src/repository/organizationRepository';
@Injectable()
export class OrganizationDao {
    constructor(private organizationRepository: OrganizationRepository) {}

    findById(id: string): Promise<OrganizationEntity> {
            return this.organizationRepository.findById(id);
    }
}

and the following in dao.module.ts

import { Module } from '@nestjs/common';
import { RepositoryModule } from 'src/repository/repository.module';
import { OrganizationDao } from './OrganizationDao';
@Module({
    imports: [RepositoryModule],
    exports: [OrganizationDao],
    providers: [OrganizationDao],
})
export class DaoModule {}
  1. And finally one domain folder called organization which are 3 files - organization.controller.ts, organization.module.ts and organization.service.ts

    service class is like following -

import { Inject, Injectable } from '@nestjs/common';
import { OrganizationDao } from 'src/dao/OrganizationDao';
@Injectable()
export class OrganizationService {
  constructor(
    @Inject('OrganizationDao')
    private readonly organizationDao: OrganizationDao,
  ) {}

  async findById(id: string): Promise<string> {
    const org = await this.organizationDao.findById(id);
    console.log('db : ' + JSON.stringify(org));
    return `This action returns a  organization`;
  }
}

controller is like following -

import { Controller, Get, Param } from '@nestjs/common';
import { OrganizationService } from './organization.service';
@Controller('dev/api/')
export class OrganizationController {
  constructor(private readonly organizationService: OrganizationService) {}

  @Get('/organizations/:id')
  findOne(@Param('id') id: string) {
    return this.organizationService.findById(id);
  }
}

and the organization.module be like following

import { Module } from '@nestjs/common';
import { OrganizationService } from './organization.service';
import { OrganizationController } from './organization.controller';
import { TypeOrmModule } from '@nestjs/typeorm';
import { OrganizationRepository } from 'src/repository/organizationRepository';
import { DaoModule } from 'src/dao/dao.module';
@Module({
  imports: [TypeOrmModule.forFeature([OrganizationRepository]), DaoModule],
  controllers: [OrganizationController],
  providers: [OrganizationService],
})
export class OrganizationModule {}

and in app.module.ts is like following

import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { DaoModule } from './dao/dao.module';
import { OrganizationEntity } from './entity/organization.entity';
import { OrganizationModule } from './organization/organization.module';
import { RepositoryModule } from './repository/repository.module';
@Module({
  imports: [
    OrganizationModule,
    DaoModule,
    RepositoryModule,    
    TypeOrmModule.forRoot({
      type: 'mysql',
      host: 'localhost',
      port: 9092,
      username: 'dev',
      password: 'dev',
      database: 'dev',
      entities: [OrganizationEntity],
      synchronize: false,
    }),
  ],
})
export class AppModule {}

Now when I am running the application, I am getting the following error:

internal/modules/cjs/loader.js:638
    throw err;
    ^
Error: Cannot find module 'src/repository/repository.module'
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:636:15)
    at Function.Module._load (internal/modules/cjs/loader.js:562:25)
    at Module.require (internal/modules/cjs/loader.js:692:17)
    at require (internal/modules/cjs/helpers.js:25:18)
    at Object.<anonymous> (C:\Users\admin\Documents\my-first-nest-project\dist\src\dao\dao.module.js:12:29)

I cannot understand what I am doing wrong? Even if I make the RepositoryModule as Global() then also getting the same error at same line.workspace snapshot

Sayan
  • 15
  • 8
  • I think you need to show us how you're importing the nodejs modules – Micael Levi Apr 24 '21 at 18:53
  • @MicaelLevi Updated with the import statements – Sayan Apr 25 '21 at 03:48
  • Thanks @MicaelLevi. Your hint works. When I change the import statement of import { RepositoryModule } from 'src/repository/repository.module'; to import { RepositoryModule } from '../repository/repository.module'; it works. But that import statement was done by the VisualCode IDE itself. – Sayan Apr 25 '21 at 04:03
  • yeah I've faced this issue before and I still doesn't understand why the absolute path one doens't throws errors in VSC. You can use the absolute path if you set up your tsconfig file like shown here: https://stackoverflow.com/a/55918656/5290447 – Micael Levi Apr 25 '21 at 15:18

0 Answers0