由于Sintra是Rack应用程序,我认为它可以使用Rack方式:
get '/' do
result = true
if result
['200', {'Content-Type' => 'application/json'}, [{result:true}.to_ json]]
else
binding.pry
['500', {'Content-Type' => 'application/json'}, [{result:false}.to _json]]
end
end
它不起作用,它总是返回500
页面,变量是true
还是false
答案 0 :(得分:2)
如果您的应用中确实有这个文字代码:
{result:true}.to_ json # <<< whitespace that shouldn't be there
然后你的代码将有一个运行时异常(可能缺少方法to_
或unknown variable or method json
),这就是你每次都得到500错误的原因。
答案 1 :(得分:0)
你可以像这样返回一个类似Rack的数组,但是数组的第一项需要特别是Fixnum
,而不仅仅是在用{{{{}}解析时会产生数字的东西。 1}}。 Sinatra checks the type of the entry确定如何处理响应。
您的回复在“纯”Rack应用中有效,但在Sinatra中无效。可以说这是Sinatra中的一个错误,或者至少是says any valid Rack response is valid。
的文档 Sinatra尝试将整个数组作为响应的主体返回(因为它响应to_i
),但在尝试处理数组时失败,因为内容不是所有字符串。
要修复它,只需将响应中的状态代码从字符串更改为Fixnums:
each