horse icon indicating copy to clipboard operation
horse copied to clipboard

Middleware handle-exception

Open ednergassen opened this issue 2 years ago • 5 comments

Bom dia!

Estou testando o middleware handle-exception no horse. Criei um middleware para uma funcionalidade específica. Quando gero uma EHorseException no mesmo, a execução do código não é interrompida, chegando até a minha rota que eu chamei. Apenas se utilizo o EHorseCallbackInterrupted que é interrompido.

Esse comportamento é para ser dessa forma mesmo?

ednergassen avatar Sep 22 '22 12:09 ednergassen

Sim, o EHorseCallbackInterrupted foi feito pra isso

viniciussanchez avatar Sep 22 '22 12:09 viniciussanchez

Certo, mas como estou gerando uma EHorseException ele não deveria de interromper a execução do código ao invés de deixar chegar a rota que eu chamei?

ednergassen avatar Sep 22 '22 13:09 ednergassen

As vezes a ordem dos middlewares tambem podem influenciar. Mas tipo, o EHorseException é pra você tratar uma exceção. O EHorseCallbackInterrupted é para interromper

viniciussanchez avatar Sep 22 '22 13:09 viniciussanchez

Obrigado pelos retornos Vinicius.

Confesso que não entendi direito.

Me corrige se eu estiver errado. O middleware handle-exception é para ter uma padrão de retorno em formato JSON. Eu utilizo a EHorseException para tratar o meu erro e poder passar informações mais detalhadas sobre o erro gerado. Mas mesmo assim continua sendo uma exception, ou seja, deveria de interromper a execução do código e retornar o JSON com as informações.

ednergassen avatar Sep 22 '22 14:09 ednergassen

 try
    Next();
  except
    on E: EHorseCallbackInterrupted do
      raise;
    on E: EHorseException do
    begin
      ...
      SendError(Res, LJSON, Integer(E.Status));
      raise EHorseCallbackInterrupted.Create; // Incluído (No original não consta)
    end;
    on E: Exception do
    begin
      ...
      SendError(Res, LJSON, LStatus);
      raise EHorseCallbackInterrupted.Create; // Incluído (No original não consta)
    end;
  end;

Não deveria de ter um raise EHorseCallbackInterrupted.Create;?

ednergassen avatar Sep 22 '22 20:09 ednergassen

Não deveria lançar no EHorseCallbackInterrupted porque daí não passaria pelos demais middlewares.

gabrielbaltazar avatar Oct 01 '22 01:10 gabrielbaltazar