如何在同一上下文中重定向到url

时间:2017-10-23 10:27:40

标签: vert.x

我有/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”:

enter image description here

最好使用(?):

ctx.response.putHeader("location", "/login").setStatusCode(302).end()

但是有不同的背景。所以我没有flash消息。

如何在同一上下文中重定向到/login

UPD。 与此issue

相关的问题

1 个答案:

答案 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();
});