I'm trying to write some Rack Middleware for a Rails 4.2 app that alters the response body using the gsub
method. I found older examples that use a pattern like this:
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
What I'm finding is that there is no setter method for response.body
. Is there another pattern I can start with to go about modifying the body?
The problem was that it expects an Array for the 3rd argument in the call
method. This pattern got me working again.
# 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
来源:https://stackoverflow.com/questions/29564883/alter-response-body-in-rack-middleware