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

Zan*_*nko 3 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("/");
});
Run Code Online (Sandbox Code Playgroud)

我读过Node.js Express:如何在处理发布请求后重定向页面?但无法弄清楚答案.

我最近将注销更改为POST而不是GET.在这样做之后,重定向不起作用

POST /logout 307 4.912 ms - 36
POST / 302 3.922 ms - 23
GET / 200 7.519 ms - -
Run Code Online (Sandbox Code Playgroud)

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

客户

HTML

<a href="javascript:;" onclick="logOut();">
Run Code Online (Sandbox Code Playgroud)

JS

 function logOut() {
        $.post("/logout");
    }
Run Code Online (Sandbox Code Playgroud)

jfr*_*d00 6

没有来自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;
    });
}
Run Code Online (Sandbox Code Playgroud)

并且,在服务器上:

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