Гнездо не может решить - PullRequest
0 голосов
/ 27 апреля 2020

Я утверждаю, что узнаю о Nest js, и я запускаю базовое c "приложение задачи", но я начинаю использовать mon goose в своем проекте и показываю ошибку:

> Potential solutions:
- If TaskModel is a provider, is it part of the current AppModule?
- If TaskModel is exported from a separate @Module, is that module imported within AppModule?
  @Module({
    imports: [ /* the Module containing TaskModel */ ]
  })

Я пробую разные способы ее решения, но я так noob на этом инструменте, так что разочарование не может найти, как решить эту ошибку .. Пожалуйста, помогите noob на этой основе

задач. service.ts

import { InjectModel } from "@nestjs/mongoose";
import { Injectable } from '@nestjs/common';
import { Task } from './interface/ITasks';
import { Model } from "mongoose";

@Injectable()
export class TasksService {

    constructor(@InjectModel('Task') private taskModel: Model<Task>) { }

    async getTasks() {
        return await this.taskModel.find()
    }

    async getTask(id: string) {
        return await this.taskModel.findById(id)
    }
}

task.module.ts

import { TaskSchema } from './schema/task.schema';
import { MongooseModule } from '@nestjs/mongoose';
import { Module } from '@nestjs/common';
import { TasksController } from './tasks.controller';
import { TasksService } from './tasks.service';

@Module({
    imports: [MongooseModule.forFeature([
        { name: 'Task', schema: TaskSchema }
    ], 'Tasks'),

    ],
    controllers: [TasksController],
    providers: [TasksService]
})
export class TasksModule { }

task.controller.ts

import { TasksService } from './tasks.service';
import { CreateTaskDto } from './DTO/create-task.dto';
import { Controller, Get, Post, Put, Delete, Body, Param } from '@nestjs/common';
import { Task } from './interface/ITasks';

@Controller('tasks')
export class TasksController {

    constructor(private taskService: TasksService) { }

    @Get() // Decorador 
    getTasks(): Promise<Task[]> {
        return this.taskService.getTasks()
    }

    @Get(':id') // Decorador 
    getTask(@Param('id') id: string) {
        return this.taskService.getTask(id)
    }


    @Post('/newTask')
    postTask(@Body() task: CreateTaskDto): { title: string, description: string, done: boolean } {
        console.log(task.title, task.description, task.done)
        return task
    }

    @Put(':id')
    updateTask(@Body() task: CreateTaskDto, @Param('id') id) {
        console.log(task)
        console.log(id)
        let action = task
        return action
    }

    @Delete(':taskId')
    deleteTask(@Param('taskId') taskId): { status: string, id: string } {
        let action = { status: "Deleted task", id: taskId }
        console.log(action);
        return action
    }

}

task.schema.ts

import { Schema } from "mongoose";

export const TaskSchema = new Schema({
    title: String,
    decription: String,
    done: Boolean
})

1 Ответ

0 голосов
/ 27 апреля 2020

В будущем, пожалуйста, покажите всю ошибку, так как она будет более полезной. Этого частичного сообщения достаточно для некоторых, но, возможно, не для всех.

В соответствии с ошибкой, потенциальное решение состоит в добавлении TaskModel к AppModule. Это заставляет меня поверить, что у вас есть TasksService в вашем AppModule массиве providers. Если это так, то Nest пытается создать два экземпляра вашего TasksService, один для TasksModule и один для AppModule. Вы, вероятно, не хотели этого делать, и способ решить эту проблему - удалить TasksService из массива AppModule * providers и использовать его только в массиве TasksModule * providers. .

...