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 に答える