0

No meu controller eu pretendia ter um método para validar os tipos dos dados que entravam no controller, para fazer um tratamento de erros mais adequado, assim sendo, o método responsável por chamar o serviço que executa a criação da instância (que está em outra classe) também chamaria o método para fazer a validação das entradas, o problema é que se eu tento fazer isso um o erro this.validate is not a function é sempre retornado. Gostaria de saber o porque isso acontece...

O código do meu controller está mais ou menos assim

class CreateAddressController {
  public validate(): void {
    console.log(`ok`);
  }

  async handle(request: Request, response: Response): Promise<Response> {
    const {
      place,
      number,
      complement,
      district,
      city,
      state,
      zipcode,
      client_id,
    } = request.body;

    this.validate();

    const createAddressUseCase = container.resolve(CreateAddressUseCase);

    await createAddressUseCase.execute({
      place,
      number,
      complement,
      district,
      city,
      state,
      zipcode,
      client_id,
    });

    return response.status(201).send();
  }
}
3
  • Como você está invocando a função handle? Se você desacoplou a função do objeto, o this não terá irá referenciar a instancia do CreateAddressController, logo seu código não irá encontrar nenhuma função com o nome validate dentro do this. Commented 20/02/2022 às 23:06
  • nas minhas rotas eu instancio o controller e invoco a função, mais ou menos dessa forma: const create = new Controller() router.post("/", create.handle) Commented 20/02/2022 às 23:07
  • Abel, utilize router.post("/", (req, res) => create.handle(req, res)) ou router.post("/", create.handle.bind(create)). Você pode ler a explicação para esse comportamento aqui. Commented 20/02/2022 às 23:18

0

Você deve fazer log-in para responder a esta pergunta.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.