Отправка параметров запроса на другую страницу с POST в Node JS и Express - PullRequest
0 голосов
/ 15 декабря 2018

Это проблема, с которой я сталкиваюсь:

У меня есть несколько последовательных веб-страниц, где я храню один и тот же идентификатор в параметрах запроса и отправляю его от одного к другому по различным причинам.Все в порядке при передаче этого параметра с GET маршрутами.Однако третья страница (которая также имеет параметр запроса) имеет краткую форму и метод POST, который перенаправляет на четвертую страницу в конце.Примерно так:

app.post("/third", function(req, res){
   req.body.id //returns undefined, but should not

   some code here

   res.redirect("/fourth?id="+id); //how i want to pass the param on
});

Независимо от того, что я использую, req.body или req.query или req.params, я никогда не могу получить доступ к идентификатору 'abcd' из

web-app/third?id=abcd

и добавитьэто к параметрам запроса четвертой страницы, я всегда получаю неопределенный.

Я делаю это неправильно?Все еще довольно плохо знакомы с Node JS и Express и всем, что связано с веб-приложениями, так что моя логика может быть отключена.Я искал в Google, но из-за моей неопытности большинство постов мне не помогло.Как отправить параметры, когда у меня есть метод POST и я не могу получить доступ к параметру из любой точки, кроме страницы, содержащей сам запрос формы?

Любая помощь приветствуется!

Редактировать:

Как выглядит интерфейс:

<form action="/third" method="post">
...
a few inputs here 
....
<input type="submit" rel="next" value="To signing" class="button" 
id="nextbutton">                        
<a onclick="setUrl();" rel="prev" class="button" id="cancelbutton">Previous page</a>
</form>

/ третья - текущая страница, четвертая - следующая

Ответы [ 2 ]

0 голосов
/ 16 декабря 2018

Теперь я понимаю, что вы имеете в виду.Ваш URL, из которого вы отправляете форму, содержит параметр запроса в URL.Это параметр, к которому вы не можете получить доступ.Хорошо - этот параметр не в параметрах POST, это не в форме.Таким образом, у вас есть 2 варианта.

  1. Когда вы выводите представление /third с помощью вашего запроса GET, вы должны добавить этот параметр запроса в качестве скрытого входного значения в форму, чтобы вы могли опубликовать его какпараметр для серверной части.

Если вы используете Node.js, вам просто нужно изменить свой /third вид (может быть шаблон Jade / Pug), чтобы иметь

// Make sure this line is in the form that you're posting (syntax is jade - any other way of replacing the idFromServer value with a server value would work just as well.
input(name="id", type="hidden", value="#{idFromServer}")

и обновите ваш код рендеринга вида так:

// It's read from query because we know this one is a get request.
res.render('third', {idFromServer: req.query.id});

После этого req.body.id должно работать!То, что мы сделали здесь, когда вы получаете третье представление с параметром id, мы помещаем в форму скрытое поле запроса POST.Когда вы выполняете POST, вы можете получить доступ к переменной id, потому что ваша форма имеет поле id со значением.Это распространенное решение, но следует обратить внимание на проверку параметра запроса, потому что теперь вы позволяете людям произвольно передавать значения на вашу страницу - что будет опубликовано, вы никогда не можете быть уверены, что люди не передадут некоторые вредоносные значениятам.

Другой способ сделать это - который я не рекомендую, но это способ - это заглянуть в заголовки.Поскольку ваше текущее решение не имеет скрытого поля формы - вы можете заглянуть в заголовок referrer , и ваш пропущенный параметр запроса будет там.

Вы можете просто сделать

console.log(req.headers.referer);

в своем представлении /third, и он должен иметь полный предыдущий URL, который также содержит искомый параметр.

0 голосов
/ 16 декабря 2018

Вы можете использовать req.query.id, чтобы получить значение из your-url.localhost/third?id=value.

res.redirect("/fourth?id=" + req.query.id); должно работать.

Документы здесь: http://expressjs.com/en/api.html#req.query

...