Как перехватывать и переписывать поврежденные вызовы JSON с помощью ПО промежуточного слоя

Я пытаюсь найти лучшее место для этого. Мое промежуточное ПО выглядит так:

class Fixer
  def initialize app
    @app = app
  end

  def call env
   if env["HTTP_ORIGIN"] == "https://where_i_expect_it_to_come_from.com/"
     env['rack.input'] = StringIO.new('{"yo":"momma"}') # <--  But this info is not actually written before the call is passed!
   end

   env['rack.input'].rewind
   status, headers, response = @app.call env
   return [status, headers, response]

  end
end

Rails.application.config.middleware.insert_before ActionDispatch::ParamsParser, Fixer

Кажется, что даже когда я переписываю вызов здесь, информация на самом деле не переписывается должным образом. Любые идеи, как я могу написать свой контент до того, как он всплывет?


person Trip    schedule 27.03.2014    source источник


Ответы (1)


я думаю, что эта проблема такая же, как здесь: https://stackoverflow.com/questions/22712663/getting-a-routing-error-when-my-routes-are-clearly-marked и здесь У меня есть сторонняя служба, которая, как мне кажется, отправляет мне искаженный JSON

насколько я понимаю, вы хотите исправить некоторые входящие данные запроса.

как упрощенный пример:

curl -X PUT -d "user[name]=something" http://localhost:3000/users/123

я меняю something на phoet в фиксере

class Fixer
  def initialize(app)
    @app = app
  end

  def call(env)
    env['rack.input'] = StringIO.new("user[name]=phoet")
    @app.call(env)
  end
end

и добавьте его в application.rb

config.middleware.insert_before "ActionDispatch::ParamsParser", "Fixer"

когда я запрашиваю свое приложение сейчас, я вижу журналы

[localhost] [fdff4eb0-8387-41] Started PUT "/users/123" for 127.0.0.1 at 2014-03-30 13:16:02 -0400
[localhost] [fdff4eb0-8387-41] Processing by UsersController#update as */*
[localhost] [fdff4eb0-8387-41]   Parameters: {"user"=>{"name"=>"phoet"}, "id"=>"123"}
person phoet    schedule 30.03.2014
comment
Справедливо. Это завершает эту часть, на которую по существу был дан ответ в моем другом вопросе. - person Trip; 31.03.2014
comment
@ Поездка, я могу неправильно понять ваши вопросы. какая у тебя ЕЩЁ проблема? - person phoet; 31.03.2014
comment
Какой бы URL я ни переписывал в своем движке Rack, Rails не сможет найти этот маршрут, пока я не перепишу маршрут на /, который перенаправляет на /quizzes. stackoverflow.com/questions/22712663/ - person Trip; 31.03.2014
comment
зачем тебе что-то переписывать? - person phoet; 04.04.2014
comment
Спасибо за этот ответ. Я вернусь к этому через год и, наконец, пойму это. - person Trip; 06.04.2016