#mongodb #typescript #mongoose #nestjs
#mongodb #typescript #мангуст #nestjs
Вопрос:
Я создаю API с использованием Nestjs и Mongodb. задачи.service.ts, попытался создать конечную точку GetAll и получил ошибку typescript: Type 'Task' does not satisfy the constraint 'Document'. Type 'Task' is missing the following properties from type 'Document': increment, model, $isDeleted, remove, and 51 more.
задачи.service.ts
import { Injectable, HttpStatus } from '@nestjs/common';
import { InjectModel } from '@nestjs/mongoose';
import { Model } from 'mongoose';
import { Task } from './dto/task.inferface';
@Injectable()
export class TasksService {
private readonly Tasks: Task[] = [];
constructor(@InjectModel('Task') private readonly TaskModel: Model<Task>) {}
async getAll(): Promise<Task> {
const tasks = await this.TaskModel.find().exec();
return tasks;
}
}
Ответ №1:
Расширьте класс document из интерфейса.
import { Document } from 'mongoose';
export interface Task extends Document {
//Task info ...
}
Ответ №2:
- Задача не должна быть DTO, она должна быть сущностью типа:
tasks.entity.ts
import { Schema, Prop, SchemaFactory } from '@nestjs/mongoose';
import { Document } from 'mongoose';
@Schema()
export class Task extends Document {
@Prop()
name: string;
}
export const TaskSchema = SchemaFactory.createForClass(Task);
- Вам также необходимо зарегистрировать эту модель в вашем модуле:
@Module({
imports: [
MongooseModule.forFeature([
{
name: Task.name,
schema: TaskSchema,
},
]),
],
})
- Таким образом, ваш код будет выглядеть примерно так
import { Injectable, HttpStatus } from '@nestjs/common';
import { InjectModel } from '@nestjs/mongoose';
import { Model } from 'mongoose';
import { Task } from './entities/task.entity';
@Injectable()
export class TasksService {
constructor(@InjectModel(Task.name) private readonly TaskModel: Model<Task>) {}
async getAll(): Promise<Task> {
const tasks = await this.TaskModel.find().exec();
return tasks;
}
}