一尘不染

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

node.js

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

我已经阅读了Node.jsExpress:处理帖子请求后如何重定向页面?但找不到答案。

我最近将注销更改为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");
    }

阅读 182

收藏
2020-07-07

共1个答案

一尘不染

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

当浏览器正在加载新页面并且服务器告诉服务器将其正在加载的页面更改为新源时,重定向工作,而不是在浏览器仅发送Ajax调用时进行。

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

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: "/"});
});
2020-07-07