2016-06-14 13 views
0

Ich verstehe nicht, warum ich Störung erhalte: am nächsten Code:vibed: past Ende der Ausgangsstrom Schreiben

void logout(HTTPServerRequest req, HTTPServerResponse res) 
{ 
    try 
    { 
     logInfo("Logout section"); 
     Json request = req.json; 
     Json responseBody = Json.emptyObject; // 

     if (req.session) // if user have active session 
     { 
      res.terminateSession(); 
      responseBody["status"] = "success"; 
      responseBody["isAuthorized"] = false; 
      res.writeJsonBody(responseBody); 
      logInfo("-------------------------------------------------------------------------------"); 
      logInfo(responseBody.toString); 
      logInfo("^-----------------------------------------------------------------------------^");        
      logInfo("User %s logout", request["username"]); // 
      logInfo("User 12333333333333 logout"); // 
     } 

     else 
     { 
      responseBody["status"] = "fail"; // user do not have active session? 
      logInfo("User do not have active session"); 
      res.writeJsonBody(responseBody); 
     } 
    writeln("-------before-------"); 
    writeln(responseBody.toString); 
    res.writeJsonBody(responseBody); 
    writeln("-------after-------"); 
    } 

    catch (Exception e) 
    { 
     logInfo(e.msg); 
     writeln("3333"); 
    } 
} 

Hier ist screenshot

Was mache ich falsch?

Antwort

3

writeJsonBody serialisiert die Reaktion JSON auf einmal setzt die status und content_type und schließt auch den Ausgabestrom. Sehen Sie sich Ihren Code genau an - er ruft zweimal res.writeJsonBody(responseBody) auf.

Wenn Sie eine Antwort streamen möchten, können Sie auf den Ausgabestream wie folgt zugreifen res.bodyWriter.put("a sentence."), aber bitte beachten Sie, dass es nach dem ersten Zugriff nicht möglich ist, eine Kopfzeile (zB Statuscode) zu ändern die Antwort, weil die Header an den Client gesendet wurden.

Übrigens könnten Sie Interesse an Vibed High-Level REST API Funktion haben.