2

我正在使用歌利亚和葡萄。在我的 goliath 服务器上,它像这样调用葡萄 api:

when '/posts' then FrameworksAPI::API.call(env)

在我的葡萄 api 类上,我的方法很简单:

get '/:id' do
 Post.find(params[:id])
end

我想修改标题 - 特别是“内容长度”,但不确定如何修改。

另外我想问一个额外的问题。如何在方法 GET 返回我想修改结果的结果之前专门创建回调/过滤器。

4

2 回答 2

7

Grape 现在header有几个版本的助手。

header 'Content-Length`, 42.to_s

关于修改正文的第二个问题,请尝试after do ...在 API 级别使用。

于 2013-02-13T18:52:33.560 回答
0

FrameworksAPI::API.call(env) 方法的返回值将是三元组 [status_code, headers, body]。因此,您不仅可以从您的案例中返回它,还可以执行以下操作:

when '/posts' then
  status, headers, body = FrameworksAPI::API.call(env)
  headers['whatever'] = blah
  [status, headers, body]

您也可以更改主体,只是要小心,因为主体可能是一个数组。

Goliath 还提供了一个 Content-Length 中间件。默认情况下会加载 Content-Length,但如果您设置自定义 Content-Length 它将优先。请注意,在您设置内容长度后,其他中间件(如格式)不会更改正文。

于 2012-09-07T05:40:43.307 回答