代码之家  ›  专栏  ›  技术社区  ›  pirmax

NestJS无法解析UserController的依赖项

  •  0
  • pirmax  · 技术社区  · 8 年前

    当前行为

    试图使用我的 用户服务.ts 认证服务.ts 用户控制器.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.

    应用程序.module.ts
    import { Module } from "@nestjs/common";
    import { ApplicationController } from "controllers/application.controller";
    import { ApplicationService } from "services/application.service";
    import { AuthModule } from "./auth.module";
    import { UserModule } from "./user.module";
    
    @Module({
      imports: [
        AuthModule,
        UserModule,
      ],
      controllers: [
        ApplicationController,
      ],
      providers: [
        ApplicationService,
      ],
    })
    export class ApplicationModule {}
    
    import { Module } from "@nestjs/common";
    import { UserController } from "controllers/user.controller";
    
    @Module({
      controllers: [
        UserController,
      ],
    })
    export class UserModule {}
    
    用户.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();
      }
    }
    
    验证模块.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 {}
    
    认证服务
    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,
        };
      }
    }
    
    用户.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

    2 回复  |  直到 8 年前
        1
  •  1
  •   Victor Ivens    8 年前

    你的 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

    推荐文章