发布请求后重定向页面[Express 4]

时间:2016-07-19 04:24:24

标签: node.js express

/**
 * @api {post} /logout Logout from system
 * @apiName Logout
 * @apiGroup Login
 */
router.post("/logout", function (req, res) {
  req.logout();
  req.session.destroy();
  return res.redirect("/");
});

我已阅读https://stackoverflow.com/a/20306929/271577但无法找到答案。

我最近将注销更改为POST而不是GET。执行此操作后,重定向功能

POST /logout 307 4.912 ms - 36
POST / 302 3.922 ms - 23
GET / 200 7.519 ms - -

我可以在客户端手动执行此操作,但我想知道如何在服务器端执行此操作。这可能吗?

客户端

HTML

<a href="javascript:;" onclick="logOut();">

JS

 function logOut() {
        $.post("/logout");
    }

1 个答案:

答案 0 :(得分:6)

您的$.post()没有来自Javascript生成的Ajax调用的重定向。 Ajax发送请求,获得响应。 ajax调用本身根本不会改变页面位置。这是Ajax调用的一个特征。

当浏览器加载新页面时,重定向工作,服务器告诉它更改加载到新源的页面,而不是浏览器只发送Ajax调用时。

当然,您可以使用客户端Javascript在$.post()完成后决定从客户端重定向。您甚至可以将$.post()的响应作为新位置,然后您的客户端Javascript就可以将window.location设置为该新网址。

function logOut() {
    $.post("/logout").then(function(data) {
        window.location = data.redirectUrl;
    });
}

并且,在服务器上:

router.post("/logout", function (req, res) {
  req.logout();
  req.session.destroy();
  res.send({err: 0, redirectUrl: "/"});
});