2015-04-10 1 views
2

Я пытаюсь написать некоторое промежуточное ПО Rack для приложения Rails 4.2, которое изменяет тело ответа с использованием метода gsub. Я нашел старые примеры, которые используют шаблон, как это:Alter response.body в Rack Middleware

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

    def call(env) 
    status, headers, response = @app.call(env) 
    # do some stuff 
    [status, headers, response] 
    end 
end 

Что я нахожу в том, что не существует метод установки для response.body. Есть ли другой образец, с которого я могу начать, чтобы изменить тело?

ответ

2

Проблема заключалась в том, что он ожидает массив для 3-го аргумента в методе call. Этот образец заставил меня снова работать.

# not real code, just a pattern to follow 
class MyMiddleware 
    def initialize(app) 
    @app = app 
    end 

    def call(env) 
    status, headers, response = @app.call(env) 
    new_response = make_new_response(response.body) 
    # also must reset the Content-Length header if changing body 
    headers['Content-Length'] = new_response.length.to_s 
    [status, headers, [new_response]] 
    end 
end 
+0

Что такое 'make_new_response'? – AjaxLeung

+0

@AjaxLeung Все, что вы хотите. Просто пример. Принимает строку, возвращает строку. – JohnMetta