【问题标题】:ExpressJS - res.redirect after DELETE requestExpressJS - 删除请求后的 res.redirect
【发布时间】:2014-07-15 05:03:48
【问题描述】:

我一直在寻找如何做到这一点 - 我试图在发出 DELETE 请求后重定向 - 这是我正在使用的代码 WITHOUT THE REDIRECT

exports.remove = function(req, res) {
  var postId = req.params.id;
  Post.remove({ _id: postId }, function(err) {
    if (!err) {
            console.log('notification!');
            res.send(200);
    }
    else {
            console.log('error in the remove function');
            res.send(400);
    }
  });
};

remove 在删除项目(帖子)时被调用。一切正常(我不得不使用res.send(200) 让它不挂在删除请求上) - 但现在我无法重定向。如果我在remove 函数中使用res.redirect('/forum'),如下所示:

exports.remove = function(req, res) {
  var postId = req.params.id;
  Post.remove({ _id: postId }, function(err) {
    if (!err) {
            console.log('notification!');
            res.send(200);
    }
    else {
            console.log('error in the remove function');
            res.send(400);
    }
    res.redirect('/forum');
  });
};

它将重定向注册为尝试删除/forumDELETE 请求,如下所示:

DELETE http://localhost:9000/forum 404 Not Found 4ms

我要做的就是刷新页面,以便在删除后更新帖子列表。任何人都可以帮忙吗?

【问题讨论】:

  • 我和你有同样的问题。一切安好。但是res.redirect不会重新加载页面。
  • @novaline - 你也在使用角度吗?我最终不得不在我的前端做一些事情,而不是在快递方面 - 请参阅下面的答案。
  • 不,我使用 jQuery。我想通过服务器端重新加载页面。有点奇怪。当我执行create 操作(POST,表单操作)时,res.redirect 工作。但是 delete 操作 (POST, $.ajax) ,res.redirect 很好,没有错误。但问题是它没有刷新页面。我可以看到从服务器端返回的网络response
  • 尝试在您的 jquery 端使用 window.location.href = url;。那是直接的javascript ...我认为jquery版本是$(window).location.href =,但两者都应该做同样的事情。 url 是您要重定向到的位置。你只需要把它放在正确的地方。也与 jquery 。如果你愿意,我可以帮助你找到合适的地方。您可以使用它来代替服务器端 res.redirect,您只需使用来自服务器端的消息来触发它。
  • 谢谢。但我的问题是为什么浏览器不刷新页面然后我在服务器端调用res.redirect。 http 状态为 200,您可以看到响应(html 文档)由服务器端返回。我知道如何在客户端做到这一点。因为使用ajax?也许form action 请求可以吗?

标签: javascript redirect express request http-delete


【解决方案1】:

我知道这已经很晚了,但是对于稍后看到的任何人,您也可以手动将 HTTP 方法重置为 GET,这也应该可以工作

exports.remove = function(req, res) {
  var postId = req.params.id;
  Post.remove({ _id: postId }, function(err) {
    if (!err) {
            console.log('notification!');
            res.send(200);
    }
    else {
            console.log('error in the remove function');
            res.send(400);
    }

    //Set HTTP method to GET
    req.method = 'GET'

    res.redirect('/forum');
  });
};

【讨论】:

    【解决方案2】:

    @ewizard 的解决方案非常棒,如果你能在前端解决这个问题。但是,如果您想在后端解决此问题,您可以向res.redirect 添加一个可选的状态码参数,如下所示:

    res.redirect(303, "/forum");

    此重定向用于“未定义原因”,默认为 GET 重定向。

    请参阅this SO post 了解更多信息。

    【讨论】:

      【解决方案3】:

      我用$window.location.href = '/forum'; 让它在我的Angular 端工作——只需将它放在$http 请求的成功函数中,该请求是delete 函数的一部分,当单击“删除”按钮时会执行该函数。

      【讨论】:

      • 如果您需要在没有出现在页面上的情况下删除某些内容怎么办?
      • @trysis - 这是一个问题吗?您是否有问题或试图指出我做错了什么?已经有一段时间了,但是对于这个问题,我不需要在不转到页面的情况下删除帖子......如果我愿意,我可以更手动地将它从数据库中删除,因为我是管理员......
      • 哦,对不起。对于大多数网站(包括,我认为,你的),这很好。这只是对某些人来说不会,我试图让这个问题更广泛。别管我。 :)
      • 我想从服务器端进行重定向,而不是发送一些带有指示客户端重定向的对象......有人知道这样做的方法吗?
      猜你喜欢
      • 1970-01-01
      • 2022-12-12
      • 1970-01-01
      • 2013-11-06
      • 1970-01-01
      • 2012-03-31
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      相关资源
      最近更新 更多