我在Sinatra遇到一个问题,我只能用json回复,而且我无法在任何地方找到好的sinatra文档,大多数事情似乎已经过时了。
无论如何,这是代码:
module MemcachedManager
class App < Sinatra::Base
register Sinatra::Contrib
helpers Sinatra::JSON
get '/' do
json({ hello: 'world' })
end
end
end
MemcachedManager::App.run! if __FILE__ == $0
我得到的回应是:
"<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"http://www.w3.org/TR/REC-html40/loose.dtd\">\n<html><body><p>{\"hello\":\"world\"}</p></body></html>\n"
它应该只是json部分。当我没有要求时,为什么要渲染html标签?
答案 0 :(得分:6)
你见过this blog post吗?
require 'json'
get '/example.json' do
content_type :json
{ :key1 => 'value1', :key2 => 'value2' }.to_json
end
我也会将其修改为:
get '/example.json', :provides => :json do
使用路由停止HTML / XML调用。既然你正在使用sinatra-contrib gem,并且因为Ruby不需要所有那些parens等,你也可以简化你给出的代码作为例子:
require 'sinatra/json'
module MemcachedManager
class App < Sinatra::Base
helpers Sinatra::JSON
get '/', :provides => :json do
json hello: 'world'
end
end
end
MemcachedManager::App.run! if __FILE__ == $0
答案 1 :(得分:1)
尝试放
content_type :json
在json(...)
电话之前