d - vibed:写入输出流的末尾

  • 本文关键字:输出流 vibed d 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");
    }
}

这是截图

我做错了什么?

writeJsonBody 立即序列化响应 JSON,设置statuscontent_type,并关闭输出流。仔细查看您的代码 - 它会调用res.writeJsonBody(responseBody)两次。

如果要流式传输响应,可以像这样访问输出流res.bodyWriter.put("a sentence."),但请注意,一旦第一次访问,就不允许更改响应的任何标头(例如状态代码),因为标头已发送到客户端。

顺便说一句,您可能会对Vibed的高级REST API功能感兴趣。

最新更新