vibed:写入输出流的结尾
vibed: Writing past end of output stream
我不明白为什么会出现错误:
下一个代码:
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");
}
}
这里是screenshot
我做错了什么?
writeJsonBody 立即序列化响应 JSON ,设置 status
和 content_type
并关闭输出流.仔细查看您的代码 - 它调用 res.writeJsonBody(responseBody)
两次。
如果你想流式传输响应,你可以像这样访问输出流res.bodyWriter.put("a sentence.")
,但请注意,一旦这是第一次访问,就不允许更改任何内容header(例如状态代码)的响应,因为 headers 已被发送到客户端。
顺便说一句,您可能对 Vibed 的 high-level REST API 功能感兴趣。
我不明白为什么会出现错误: 下一个代码:
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");
}
}
这里是screenshot
我做错了什么?
writeJsonBody 立即序列化响应 JSON ,设置 status
和 content_type
并关闭输出流.仔细查看您的代码 - 它调用 res.writeJsonBody(responseBody)
两次。
如果你想流式传输响应,你可以像这样访问输出流res.bodyWriter.put("a sentence.")
,但请注意,一旦这是第一次访问,就不允许更改任何内容header(例如状态代码)的响应,因为 headers 已被发送到客户端。
顺便说一句,您可能对 Vibed 的 high-level REST API 功能感兴趣。