我有/logout
行动,应该重定向到/login
。 /login
呈现模板,我从上下文中读取flash消息。这有效,但浏览器中的网址仍然是“/ logout”:
router.get("/logout").handler((ctx) => {
if (ctx.user()!=null) {
ctx.clearUser()
//flash message
ctx.put("msg", "Logout succeed")
}
ctx.reroute("/login")
})
我想要什么,但网址应为“/ login”:
最好使用(?):
ctx.response.putHeader("location", "/login").setStatusCode(302).end()
但是有不同的背景。所以我没有flash消息。
如何在同一上下文中重定向到/login
?
UPD。 与此issue
相关的问题答案 0 :(得分:1)
要使用Flash消息,您应该使用内容添加cookie到重定向:
// this makes the message available to the client
ctx
.addCookie(Cookie.cookie("flashMessage", "Logout succeed"));
// configure where to redirect
ctx.response()
.putHeader("location", "/login");
// perform the redirect
ctx.end(302);
然后在客户端,您需要一些JavaScript来阅读消息和 根据需要执行显示。由于如果你在cookie插件中使用jQuery,没有简单的方法可以在浏览器上读取cookie,你可以这样做:
$.fn.flashMessage = function (options) {
var target = this;
options = $.extend({}, options, { timeout: 3000 });
if (!options.message) {
options.message = getFlashMessageFromCookie();
deleteFlashMessageCookie();
}
if (options.message) {
if (typeof options.message === "string") {
target.html("<span>" + options.message + "</span>");
} else {
target.empty().append(options.message);
}
}
if (target.children().length === 0) return;
target.fadeIn().one("click", function () {
$(this).fadeOut();
});
if (options.timeout > 0) {
setTimeout(function () { target.fadeOut(); }, options.timeout);
}
return this;
function getFlashMessageFromCookie() {
return $.cookie("FlashMessage");
}
function deleteFlashMessageCookie() {
$.cookie("FlashMessage", null, { path: '/' });
}
};
在HTML中添加占位符,如:
<div id="flash-message"></div>
然后触发它:
$(function() {
$("#flash-message").flashMessage();
});