vibed: запись за конец выходного потока
Я не могу понять, почему я получаю ошибку: на следующий код:
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");
}
}
Вот скриншот
Что я делаю не так?
1 ответ
Решение
writeJsonBody сериализует ответ JSON сразу, устанавливает status
а также content_type
а также закрывает выходной поток. Внимательно посмотрите на ваш код - он вызывает res.writeJsonBody(responseBody)
дважды.
Если вы хотите передать ответ, вы можете получить доступ к выходному потоку, как это res.bodyWriter.put("a sentence.")
, но учтите, что после первого обращения к нему не разрешается изменять заголовки (например, код состояния) ответа, поскольку заголовки отправлены клиенту.
Кстати, вас может заинтересовать высокоуровневая функция REST API Vibed.