简体   繁体   English

如何修复 NestJS @InjectModel() 依赖错误?

[英]How to fix NestJS @InjectModel() dependency error?

rememberLink.scheme.ts记住Link.scheme.ts

import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
import { Document, Types } from 'mongoose';
import { User } from 'src/users/schemas/users.schema';

export type RememberLinkDocument = RememberLink & Document;

@Schema({versionKey: false, timestamps: true})
export class RememberLink {
    @Prop({ type: String, required: true })
    code: string;

    @Prop({ type: Types.ObjectId, ref: User.name, required: true })
    user: User;
}

export const RememberLinkSchema = SchemaFactory.createForClass(RememberLink);

remember-password.module.ts记住密码.module.ts

import { Module } from '@nestjs/common';
import { MongooseModule } from '@nestjs/mongoose';
import { RememberPasswordController } from './remember-password.controller';
import { RememberPasswordService } from './remember-password.service';
import { RememberLink, RememberLinkSchema } from './schemas/rememberLink.schema';

@Module({
    imports: [
        MongooseModule.forFeature([{
            name: RememberLink.name,
            schema: RememberLinkSchema
        }])
    ],
    controllers: [RememberPasswordController],
    providers: [RememberPasswordService],
    exports: [RememberPasswordService]
})
export class RememberPasswordModule {}

remember-password.service.ts记住密码.service.ts

import { Injectable } from '@nestjs/common';
import { InjectModel } from '@nestjs/mongoose';
import { Model } from 'mongoose';
import { UserDto } from 'src/users/dto/user.dto';
import { User } from 'src/users/schemas/users.schema';
import { RememberLinkDto } from './dto/rememberLink.dto';
import { RememberLink, RememberLinkDocument } from './schemas/rememberLink.schema';

@Injectable()
export class RememberPasswordService {

    constructor( @InjectModel(RememberLink.name) private readonly rememberLinkModel: Model<RememberLinkDocument> ) {}

    async getUserByRememberCode(code: string): Promise<UserDto> {
        return await this.rememberLinkModel.findOne({code}).populate(User.name).lean();
    }
}

Error:错误:

Nest can't resolve dependencies of the RememberPasswordService (?). Nest 无法解析 RememberPasswordService (?) 的依赖关系。 Please make sure that the argument RememberLinkModel at index [0] is available in the RememberPasswordService context.请确保索引 [0] 处的参数 RememberLinkModel 在 RememberPasswordService 上下文中可用。

Fixed.固定的。 It was import "RememberPasswordService" instead of "RememberPasswordModule" in another module它是在另一个模块中导入“RememberPasswordService”而不是“RememberPasswordModule”

What I would do is export the MongooseModule as well, Its just that the dependency injection knows that there will be Separate module for that model somewhere in the App我要做的就是导出 MongooseModule,它只是依赖注入知道应用程序中的某处会有 model 的单独模块

@Module({
    imports: [
        MongooseModule.forFeature([{
            name: RememberLink.name,
            schema: RememberLinkSchema
        }])
    ],
    controllers: [RememberPasswordController],
    providers: [RememberPasswordService],
    exports: [MongooseModule,RememberPasswordService] // <-- MongooseModule added here
})
export class RememberPasswordModule {}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM