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.

Другие вопросы по тегам