Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

572
Visualizações
NestJs: How can I inject a Provider that has a constructor with a Mongoose Model?

Hi I have the following code in NestJS.I am using moduleRef and have declared a custom provider named 'blogService'.However I am getting an error that says:

'Nest can't resolve dependencies of the blogService (?). Please make sure that the argument BlogModel at index [0] is available in the AppModule context.'

.What exactly am I doing wrong while declaring the custom provider which is leading to this error as it seems that I am injecting the Mongoose Model as well?

app.module.ts

import { BlogService } from './blog/service/blog.service';
import { Blog } from './blog/schema/blog.schema';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { ConfigModule } from '@nestjs/config';
import { MongooseModule, getModelToken } from '@nestjs/mongoose';

        @Module({
          imports: [
            ConfigModule.forRoot({ isGlobal: true, load: [configuration], }),
            MongooseModule.forRoot(process.env.DATABASE_URL)
          ],
          controllers: [AppController],
          providers: [AppService, {
            provide: 'blogService',
            useFactory: () => BlogService,
            inject: [getModelToken(Blog.name)]
          }],
        
        })

app.controller.ts

import { Controller, Get } from '@nestjs/common';
import { ModuleRef } from '@nestjs/core';
import { BlogService } from './blog/service/blog.service';

@Controller()
export class AppController {
  constructor(private readonly modelRef: ModuleRef) { }

  @Get('blogs')
  async getAllBlogs(): Promise<any> {
    const response = await this.modelRef.get('blogService', { strict: false }).getAllBlogs();
    return response;
  }
}

blog.service.ts

import { Injectable, HttpException, HttpStatus, Logger } from '@nestjs/common';
import { Blog } from '../schema/blog.schema';
import { InjectModel } from '@nestjs/mongoose';
import { Model, Types } from 'mongoose';


@Injectable()
export class BlogService {

    private readonly logger = new Logger(BlogService.name);

    constructor(@InjectModel(Blog.name) private blogModel: Model<Blog>) { }


    async getAllBlogs() {
        try {
            const blogs = await this.blogModel.find().exec();
            return blogs;
        } catch (error) {
            this.logger.error(error.message);
        }
    }

}
about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Not really sure why you're making a custom provider for this, other than possibly academic purposes. Either way, for anything you want to @InjectModel() or use getModelToken() for, you needx to have a MongooseModule.forFeature() call to register the custom provider the @nestjs/mongoose package will create for you. Once you have this you can use @InjectModel() or a custom provider like

{
  provide: 'blogService',
  inject: [getModelToken(Blog.name)],
  useFactory: (model: Model<Blog>) => new BlogService(model)
}
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda