Redirect page after post request [Express 4]

萝らか妹 提交于 2020-01-13 05:06:29

问题


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

I've read Node.js Express : How to redirect page after processing post request? but could not figure out the answer.

I recently changed logout to POST instead of GET. After doing so, redirect does'nt work

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

I can manually do it on client side, but I want to know how to do it on server side as well. Is this possible?

CLIENT

HTML

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

JS

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

回答1:


There are no redirects from a Javascript generated Ajax call which your $.post() is. Ajax sends a request, gets a response. An ajax call by itself does not change the page location at all. That's a characteristic of Ajax calls.

Redirects work when the browser is loading a new page and the server tells it to change what page it is loading to a new source, not when the browser just sends an Ajax call.

You can, of course, use your client-side Javascript to decide to redirect from the client side after your $.post() finishes. You could even have the response from the $.post() be the new location and your client-side Javascript could then just set window.location to that new URL.

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

And, on the server:

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


来源:https://stackoverflow.com/questions/38449568/redirect-page-after-post-request-express-4

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!