繁体   English   中英

NestJS无法解析UserController的依赖项

[英]NestJS can't resolve dependencies of the UserController

当前行为

尝试在UserController.ts中使用UserService.tsAuthService.ts ,但出现以下错误: [ExceptionHandler] Nest can't resolve dependencies of the UserController (?, +). Please make sure that the argument at index [0] is available in the current context. [ExceptionHandler] Nest can't resolve dependencies of the UserController (?, +). Please make sure that the argument at index [0] is available in the current context.

通过指令将问题最小化

application.module.ts
import { Injectable } from "@nestjs/common";
import { InjectRepository } from "@nestjs/typeorm";
import { Repository } from "typeorm";
import { UserEntity } from "entities/user.entity";

@Injectable()
export class UserService {
  constructor(
    @InjectRepository(UserEntity)
    private readonly repository: Repository<UserEntity>,
  ) {}

  async findAll(): Promise<UserEntity[]> {
    return await this.repository.find();
  }
}
user.module.ts
import {
  Get,
  Controller,
  Post,
  Body,
  HttpCode,
  HttpStatus,
} from "@nestjs/common";
import { UserService } from "services/user.service";
import { UserEntity } from "entities/user.entity";
import * as bcrypt from "bcryptjs";
import { AuthService } from "services/auth.service";

@Controller("/users")
export class UserController {
  constructor(
    private readonly userService: UserService,
    private readonly authService: AuthService,
  ) {}

  @Get()
  async root(): Promise<UserEntity[]> {
    return await this.userService.findAll();
  }
...
user.service.ts
 import { Injectable } from "@nestjs/common"; import { InjectRepository } from "@nestjs/typeorm"; import { Repository } from "typeorm"; import { UserEntity } from "entities/user.entity"; @Injectable() export class UserService { constructor( @InjectRepository(UserEntity) private readonly repository: Repository<UserEntity>, ) {} async findAll(): Promise<UserEntity[]> { return await this.repository.find(); } } 
auth.module.ts
 import { Module } from "@nestjs/common"; import { JwtModule } from "@nestjs/jwt"; import { AuthService } from "services/auth.service"; @Module({ imports: [ JwtModule.register({ secretOrPrivateKey: "key12345", }), ], }) export class AuthModule {} 
auth.service.ts
 import { Injectable } from "@nestjs/common"; import { JwtService } from "@nestjs/jwt"; import { TokenJwtInterface } from "interfaces/token-jwt.interface"; @Injectable() export class AuthService { private tokenType; constructor(private readonly jwtService: JwtService) { this.tokenType = "bearer"; } public generateTokenJwt( payload: object, expiresIn: number, ): TokenJwtInterface { const accessToken = this.jwtService.sign(payload); return { access_token: accessToken, token_type: this.tokenType, refresh_token: "", expires_in: expiresIn, }; } } 
user.controller.ts
 import { Get, Controller, Post, Body, HttpCode, HttpStatus, } from "@nestjs/common"; import { UserService } from "services/user.service"; import { UserEntity } from "entities/user.entity"; import * as bcrypt from "bcryptjs"; import { AuthService } from "services/auth.service"; @Controller("/users") export class UserController { constructor( private readonly userService: UserService, private readonly authService: AuthService, ) {} @Get() async root(): Promise<UserEntity[]> { return await this.userService.findAll(); } ... 

改变行为的动机/用例是什么?

修正错误?

环境

巢状版本:5.1.0对于工具问题:-节点版本:v8.11.3-平台:Ubuntu-IDE:VSC

AuthService必须是你的一部分UserModule

import { Module } from "@nestjs/common";
import { UserController } from "controllers/user.controller";

@Module({
   controllers: [
     UserController,
   ],
   components: [
     UserService,
     AuthService
   ],
   imports: [
     AuthModule 
   ]
})
export class UserModule {}

我一直认为import某个模块就足够了,但是根据我的经验,我总是不得不在components部分中声明它。

我还意识到,您忘记在组件的模块中声明UserService

暂无
暂无

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

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