我在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
Run Code Online (Sandbox Code Playgroud)
我得到的回应是:
"<!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"
Run Code Online (Sandbox Code Playgroud)
它应该只是json的一部分.当我没有要求它时,为什么它会渲染html标签?
你看过这篇博文吗?
require 'json'
get '/example.json' do
content_type :json
{ :key1 => 'value1', :key2 => 'value2' }.to_json
end
Run Code Online (Sandbox Code Playgroud)
我也会修改为:
get '/example.json', :provides => :json do
Run Code Online (Sandbox Code Playgroud)
使用该路由停止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
Run Code Online (Sandbox Code Playgroud)