2

由于 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

4

2 回答 2

2

如果您的应用程序中确实有此文字代码:

{result:true}.to_  json # <<< whitespace that shouldn't be there

然后您的代码将出现运行时异常(可能缺少方法to_unknown variable or method json),这就是您每次都会收到 500 错误的原因。

于 2013-04-24T14:45:10.613 回答
0

您可以像这样返回一个类似 Rack 的数组作为响应,但数组的第一项需要是Fixnum特定的,而不仅仅是在解析时会产生数字的东西to_i。Sinatra检查条目的类型以确定如何处理响应。

您的响应在“纯” Rack 应用程序中有效,但在 Sinatra 中无效。可以说这是 Sinatra 中的一个错误,或者至少是说任何有效的 Rack 响应都是有效的文档。

Sinatra 尝试将整个数组作为响应的主体返回(因为它响应each),但在尝试处理数组时失败,因为内容并非全是字符串。

要修复它,只需将响应中的状态代码从 Strings 更改为 Fixnums:

[200, {'Content-Type' => 'application/json'}, [{result:true}.to_json]]
于 2013-05-17T21:39:16.787 回答