Ich bin neu in Ruby (gestern begonnen) und ich spiele ein wenig mit Sinatra, um eine API zu bauen. Ich trat ein Thema, das mich ohne Anhaltspunkt links:Inhalt der Variablen ändert sich nach dem Lesen in Ruby
post '/login' do
if request.body.read.length == 0
halt 400 # bad request
else
body = JSON.parse(request.body.read)
end
end
Wenn ich diesen Code ausgeführt, ich hatte einen Fehler, da ich eine leere Zeichenfolge mit body = JSON.parse(request.body.read)
zu analysieren versucht. Tatsächlich musste ich request.body.read
in einer anderen Variablen speichern, um es zweimal (oder mehr) zu verwenden, weil es wie request.body
nach der ersten Verwendung "konsumiert" wird.
Das erinnert mich an Anleihen mit Rost, aber hier habe ich das nicht erwartet und kann es nicht auf Google ausdrücken, um irgendwelche Unterlagen zu finden. Kann mir jemand erklären, was passiert ist und warum request.body
nur einmal gelesen werden kann?
Für Menschen, die das gleiche Problem haben (wir wissen nie), hier ist das Update:
post '/login' do
body = request.body.read
if body.length == 0
halt 400 # bad request
else
body_json = JSON.parse(body)
end
end
ich über IO-Objekte gehört, aber ich kann immer noch nicht weiter in meinen Forschungen gehen.
Sie benötigen mindestens ein weiteres Tag, da das, was Sie gepostet haben, kein reiner Ruby ist. –
Dies ist (zugegebenermaßen leicht) hier abgedeckt: http://www.sinatrarb.com/intro.html#Accessing%20the%20Request%20Object – mwp