在机架中间件中更改 response.body
Alter response.body in Rack Middleware
我正在尝试为 Rails 4.2 应用程序编写一些机架中间件,该应用程序使用 gsub
方法更改响应 body。我找到了使用如下模式的旧示例:
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
没有 setter 方法。我可以从另一种模式开始修改 body?
问题是它需要一个数组作为 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.bytesize.to_s
[status, headers, [new_response]]
end
end
我正在尝试为 Rails 4.2 应用程序编写一些机架中间件,该应用程序使用 gsub
方法更改响应 body。我找到了使用如下模式的旧示例:
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
没有 setter 方法。我可以从另一种模式开始修改 body?
问题是它需要一个数组作为 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.bytesize.to_s
[status, headers, [new_response]]
end
end