ExpressJS - res.redirect после запроса 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

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

3 ответа

Решение

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

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

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

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

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

Смотрите этот SO пост для получения дополнительной информации.

Другие вопросы по тегам