Ответ об ошибке не анализируется Фарадеем, несмотря на добавление промежуточного программного обеспечения :json

Я инициализирую свой клиент Фарадея следующим образом:

@client = Faraday.new(url: BASE_URL) do |faraday|
  faraday.request  :json
  faraday.response :json

  faraday.response :raise_error
end

И когда я спасаю Faraday::ClientError, тело ответа выглядит так:

irb> e.response[:body]
"{\"error\":\"access_denied\",\"error_description\":\"Unauthorized\"}"

Я ожидаю, что он будет проанализирован и тело будет хэшем. Что я делаю не так?


person Capripot    schedule 20.04.2021    source источник


Ответы (1)


В Faraday порядок регистрации промежуточного ПО имеет значение, потому что это конвейер (аналогично стойке).

Поэтому, если вы поместите промежуточное ПО :raise_error перед :json, будет проанализировано тело ошибки.

@client = Faraday.new(url: BASE_URL) do |faraday|
  faraday.request  :json

  faraday.response :raise_error
  faraday.response :json
end
person Capripot    schedule 20.04.2021