Изменить данные POST перед перенаправлением с помощью expressjs?

Это в основном код, который я имею:

// in file1.php

<?php print_r($_POST); ?>
<form method="POST" action="http://localhost:1234">
<button type="submit" value="3" name="q">Register</button>
</form>

// in server.js

app.post('/', (req, res) => {
request.post(
req.headers.referer,
{ form: { test: "mytest" } },
function (error, response, body) {
if (!error && response.statusCode == 200) {
// Print out the response body
res.set("POST", "test=1234");
res.redirect(302, req.headers.referer);
}
});
});

app.listen(1234);

Вот что должен делать этот код:

Когда я в file1.php и я нажимаю Register кнопку, он должен отправить запрос назад file1.php с { test: "mytest" } как заголовки постов из http://localhost:1234; file1.php что-то делает с этим почтовым запросом и отправляет ответ http://localhost:1234 (внутри обратного вызова в request.post()), тогда он должен изменить заголовки POST на { test: 1234 }, перенаправить на file1.php и показать Array([test]=>1234) [Register button] на экране.

Проблема в том, что я не могу заставить его работать, чтобы отобразить этот текст на экране, кажется, что заголовки не меняются или я не меняю их должным образом. Что я могу сделать?

0

Решение

Я думаю, что вы путаете заголовки с телом запроса, а имена заголовков с методом HTTP.

С этим:

res.set("POST", "test=1234");

Вы можете только изменить заголовок ответа и не указывать клиенту использовать этот заголовок после выполнения перенаправления.

Кроме того, установка заголовка с именем POST не будет передавать данные, помещенные в значение этого заголовка, в теле запроса POST.

Кажется, что вы пытаетесь сделать результат перенаправления в запросе POST с определенными полями, передаваемыми в теле, но здесь вы устанавливаете заголовок с именем POST с тем, что вы, вероятно, хотите установить в теле. Это не будет работать таким образом.

Обычное перенаправление (301 перемещено навсегда или найдено 302) всегда приводит к запросу GET, даже если перенаправление является ответом на POST, потому что на практике 301 и 302 работают как 303 См. Другое, что приводит к запросу GET. Существует временное перенаправление 307, которое явно запрещает изменение метода HTTP, но браузеры должны предупреждать пользователей перед выполнением таких перенаправлений, и это может не всегда работать. Смотрите этот ответ для более подробной информации:

1

Другие решения

Невозможно изменить POST-запрос клиента при перенаправлении таким способом, если, конечно, вы не хотите прокси-запрос, если сервер выполняет перенаправление от имени клиента.

Но есть некоторые решения для вас, сначала используйте 307 вместо 302, чтобы перенаправить ваш пост-запрос с телом

res.redirect(307, "http://badasse.com/api/t2");

Затем вы можете передать дополнительные данные через параметры GET.

res.redirect(307, "http://badasse.com?morePost="+encodeURIComponent(JSON.stringify({data1: "yolo"}));

Или заголовки:

 res.setHeader("MyHeader", "MyStringifiedDatas")

Или просто попробуйте использовать сессию

req.session['success'] = 'User added successfully';
0

По вопросам рекламы [email protected]