我已经能够将所有内容类型设置为before块中的JSON ,但是在过滤器之后是否有一个sinatra允许我在所有响应上运行to_json(而不是to_json在下面的示例中写入3次)?
require 'sinatra'
require 'json'
before do
content_type :json
end
get '/' do
{ song: "Hello" }.to_json
end
get '/go' do
{ song: "Go Yo Ho" }.to_json
end
get '/hi' do
{ song: "Wake me Up" }.to_json
end
Run Code Online (Sandbox Code Playgroud)
谢谢!
你可以在一个after块中做到这一点:
before do
content_type :json
end
get '/' do
{ a: 1 }
end
after do
response.body = JSON.dump(response.body)
end
Run Code Online (Sandbox Code Playgroud)
Sinatra将重新计算更新的正文值的正确内容长度.
另一种方法是使用帮助器:
helper do
def j(data)
JSON.dump(data)
end
end
get '/' do
j({ a: 1 })
end
Run Code Online (Sandbox Code Playgroud)
该Sinatra::JSON项目做了同样的事情.此外,您可能希望查看专为构建API(如Grape或Goliath)而设计的库.这两个库提供了一种简单的方法来连接解码器和编码器来处理这种类型的自动转换.
| 归档时间: |
|
| 查看次数: |
2039 次 |
| 最近记录: |