Невозможно создать класс [class LoginController] с помощью AdonisJs v6

У меня проблема с классом AdonisJS.

Мой код LoginController

export default class LoginController {
  constructor(protected authService: AuthService) {}

  @inject()
  doLogin({ request }) {
    return this.authService.doLogin(request)
  }
}

Код AuthService

export default class AuthService {
  constructor(private userRepository: UserRepositoryInterface) {}

  // login user
  @inject()
  async doLogin(request: any) {
    const { email, password } = request.only(['email', 'password'])

    try {
      // get user by email
      const user = await this.userRepository.getByEmail(email)

      if (!user) {
        
      } else {
        if (user.active === StatusEnum.ACTIVE) {
          const userLogin = this.userRepository.verifyCredentials(email, password)
          if (await userLogin) {
            const token = this.userRepository.createToken(user)

            const response = {
              token: token,
            }

           
          } else {
            
          }
        } else {
          
        }
      }
    } catch (error) {
      
    }
  }
}

Я вызываю AuthService в LoginController, и это работает.

private authService = new AuthService

Целью является вызов конструктора для использования во всем коде функции, а ошибка приведена ниже.

При выполнении я получаю эту ошибку

"message": "Cannot construct \"[class LoginController]\" class. Container is not able to resolve its dependencies. Did you mean to use @inject decorator",
"name": "RuntimeException",
"status": 500,

Вы можете помочь?

Спасибо

Зод: сила проверки и преобразования данных
Зод: сила проверки и преобразования данных
Сегодня я хочу познакомить вас с библиотекой Zod и раскрыть некоторые ее особенности, например, возможности валидации и трансформации данных, а также...
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Мне нравится библиотека Mantine Component , но заставить ее работать без проблем с Remix бывает непросто.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
TypeScript против JavaScript
TypeScript против JavaScript
TypeScript vs JavaScript - в чем различия и какой из них выбрать?
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Не все нужно хранить на стороне сервера. Иногда все, что вам нужно, это постоянное хранилище на стороне клиента для хранения уникальных для клиента...
Что такое ленивая загрузка в Angular и как ее применять
Что такое ленивая загрузка в Angular и как ее применять
Ленивая загрузка - это техника, используемая в Angular для повышения производительности приложения путем загрузки модулей только тогда, когда они...
0
0
86
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы получаете эту ошибку из-за позиции декоратора @inject().

Вам нужно использовать декоратор @inject() поверх того места, куда вы хотите ввести.

Например, вы должны написать декоратор над объявлением класса, чтобы внедрить что-то внутри конструктора вашего класса.

@inject()
class MyService {
  constructor(private someOtherService: SomeOtherService) {}
}

Этот код добавит экземпляр SomeOtherService в ваш конструктор.

Если вы хотите внедрить что-то непосредственно в метод, вы должны написать декоратор над объявлением метода.

class AuthController {
  @inject()
  doLogin({}: HttpContext, someOtherService: SomeOtherService) {}
}

Здесь мы внедряем экземпляр SomeOtherService непосредственно внутрь метода.

--

Поэтому, чтобы исправить вашу проблему, вы должны написать декоратор @inject() над объявлением вашего класса, поскольку вы хотите внедрить свою зависимость внутри конструктора вашего класса.

Другие вопросы по теме