ExpressJS: как перенаправить POST-запрос с параметрами

Мне нужно перенаправить все запросы POST моего сервера node.js на удаленный сервер.

Я пытался сделать следующее:

app.post('^*$', function(req, res) {
  res.redirect('http://remoteserver.com' + req.path);
});

Перенаправление работает, но без параметров POST. Что я должен изменить, чтобы сохранить параметры POST?

1 ответ

В HTTP 1.1 есть код состояния (307), который указывает, что запрос должен повторяться с использованием того же метода и данных поста.

307 Временное перенаправление (начиная с HTTP/1.1). В этом случае запрос должен повторяться с другим URI, но в будущих запросах все еще может использоваться исходный URI. В отличие от 303, метод запроса не должен изменяться при повторном выдаче исходного запроса. Например, запрос POST должен повторяться с использованием другого запроса POST.

В express.js код состояния - это первый параметр:

res.redirect(307, 'http://remoteserver.com' + req.path);

Подробнее об этом читайте на стеке программистов.

проксирование

Если это не сработает, вы также можете отправлять POST-запросы от имени пользователя с сервера на другой сервер. Но учтите, что запросы будет выполнять ваш сервер, а не пользователь. По сути, вы будете проксировать запрос.

var request = require('request'); // npm install request

app.post('^*$', function(req, res) {
    request({ url: 'http://remoteserver.com' + req.path, headers: req.headers, body: req.body }, function(err, remoteResponse, remoteBody) {
        if (err) { return res.status(500).end('Error'); }
        res.writeHead(...); // copy all headers from remoteResponse
        res.end(remoteBody);
    });
});

Нормальный редирект:

user -> server: GET /
server -> user: Location: http://remote/
user -> remote: GET /
remote -> user: 200 OK

Пост "редирект":

user -> server: POST /
server -> remote: POST /
remote -> server: 200 OK
server -> user: 200 OK
Другие вопросы по тегам