问题
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?
回答1:
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