Гнездо JS, пн goose: добавить сервис в модель - PullRequest
0 голосов
/ 29 апреля 2020

У меня проблема с Nest Js и mon goose, я пытаюсь создать начальное значение для своей базы данных, и главная проблема, с которой я сталкиваюсь - я не могу импортировать сервис из моего модуля в другой модуль .

И это постоянно дает мне ошибку:

Nest не может разрешить зависимости CategoryModel (?). Пожалуйста, убедитесь, что аргумент с индексом [0] доступен в контексте MongooseModule.

главное, что я пытаюсь сделать, это создать начальное число для моих категорий.

Вот мой модуль категории:

import { Module } from '@nestjs/common';
import { CategoryController } from './category.controller';
import { CategoryService } from './category.service';
import { MongooseModule } from '@nestjs/mongoose';
import { CategorySchema } from 'src/models/category.schema';

@Module({
  imports: [MongooseModule.forFeature([{ name: 'Category', schema: CategorySchema }])],
  controllers: [CategoryController],
  providers: [CategoryService]
})
export class CategoryModule {}

Служба моей категории:

import { Model } from 'mongoose';
import { Injectable, Inject } from '@nestjs/common';
import { CategoryInterface } from '../interfaces/category.interface';
import { InjectModel } from '@nestjs/mongoose';

@Injectable()
export class CategoryService {
  constructor(@InjectModel('Category') private categoryModel: Model<CategoryInterface>) {}

  async create(category){
    const createdQuestion = new this.categoryModel(category);

    return createdQuestion.save();
  }

  async getMainCategories() {
     return this.categoryModel.find( { parent: null } );
  }
}

Контроллер моей категории:

import { Controller, Post, Get, Body, HttpCode } from '@nestjs/common';
import { CategoryService } from './category.service';

@Controller('category')
export class CategoryController {

  constructor(private categoryService: CategoryService) { }

  @Post()
  @HttpCode(204)
  async createCategory(@Body() category) {
    console.log('evo je kategorija ', category);
    const data = await this.categoryService.create(category);
  }

  @Get('/main')
  async getAllCategories() {
      const data = await this.categoryService.getMainCategories();
      return data;
  }

}

Модуль My Seeder, где у меня есть провайдер для этой исходной базы данных:

import { Module } from '@nestjs/common';
import { Seeder } from './seeder';


@Module({
  providers: [Seeder],
})
export class SeederModule {}

и мой seeder.ts

import { Injectable } from '@nestjs/common';
import { CategoryService } from 'src/category/category.service';

@Injectable()
export class Seeder {

  constructor(private categoryService: CategoryService) { }


  async seed() {

  }
  async categories() {
   // const data = await this.categoryService.createMultiple(categories);

  }
}

Мой App.module

import { Module } from '@nestjs/common';
import { MongooseModule } from '@nestjs/mongoose';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { CategoryModule } from './category/category.module';
import { QuizModule } from './quiz/quiz.module';
import { ConfigModule } from '@nestjs/config';
import config from './config/config';

@Module({
  imports: [  
              MongooseModule.forRoot('mongodb://localhost:27017'),
              ConfigModule.forRoot({ load: [config], isGlobal: true }), 
              CategoryModule,
              QuizModule
            ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

Категория Модель:

import * as mongoose from 'mongoose';

export const CategorySchema = new mongoose.Schema({
  name: { type:String, required:true, unique: true },
  slug: { type:String, required:true, unique: true },
});
And for some reason it is not working, even If I import whole 

GitHub Репозиторий проекта : https://github.com/HunterJS-bit/react-quiz-app

CategoryModule или CategoryService в Seeder.module ??

Примечание. Чтобы воспроизвести ошибку, попробуйте запустить npm run seed с сервера / пакета. json

Спасибо за помощь:)

1 Ответ

1 голос
/ 29 апреля 2020

Вам необходимо добавить CategoryModule exports: [CategoryService], чтобы другие модули могли импортировать модуль и использовать его для CategoryService. Так вы делитесь провайдерами в Nest JS. Вы должны добавить imports: [CategoryModule] к SeederModule, чтобы поставщики SeederModule могли использовать exports CategoryModule. Тогда все должно загрузиться просто отлично.

...