Подтвердить что ты не робот

ExpressJS - res.redirect после запроса DELETE

Я искал все для того, как это сделать - я пытаюсь перенаправить после запроса DELETE - вот код, который я использую БЕЗ ПРЯМОГО:

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), чтобы он не зависал в запросе на удаление) - но теперь у меня проблемы с перенаправлением. Если я использую res.redirect('/forum') внутри функции remove, например:

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');
  });
};

Он регистрирует перенаправление как запрос DELETE, который пытается удалить /forum, например:

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

Все, что я пытаюсь сделать, это обновить страницу, чтобы список сообщений обновлялся после удаления. Может ли кто-нибудь помочь?

4b9b3361

Ответ 1

Я работал с моей стороной Angular с $window.location.href = '/forum'; - просто положил ее в функцию успеха запроса $http, которая является частью функции delete, которая запускается, когда кнопка "Удалить" щелкнул.

Ответ 2

Я знаю, что это поздно, но для тех, кто видит это позже, вы также можете вручную reset использовать метод 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');
  });
};

Ответ 3

Решение @ewizard отлично, если вы можете исправить это на лицевой стороне. Однако, если вы хотите исправить это на задней панели, вы можете добавить необязательный аргумент кода состояния в res.redirect следующим образом:

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

Это перенаправляет для "Undefined Причина", которая по умолчанию будет перенаправлена ​​GET.

Подробнее см. этот пост..