这是我面临的问题
我有多个连续的网页,其中由于各种原因,我在查询参数中保留相同的ID,并将其从一个发送到另一个。使用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,我都无法从
访问ID'abcd'web-app/third?id=abcd
并将其添加到第四页查询参数中,我总是无法定义。
我做错了吗?对于Node JS和Express以及与Web应用程序相关的一切,它还是一个新事物,因此我的逻辑可能不对。我已经搜索过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>
/第三是当前页面,/第四是下一页
答案 0 :(得分:0)
您将要使用req.query.id
来从your-url.localhost/third?id=value
获取价值。
res.redirect("/fourth?id=" + req.query.id);
应该可以工作。
答案 1 :(得分:0)
我明白你的意思了。您要发布表单的网址中的URL中包含一个查询参数。这是您无法访问的参数。好吧-该参数不在POST参数中,也不在表单中。因此,您有2个选择。
/third
视图时,应将该查询参数作为隐藏的输入值添加到表单中,以便可以将其作为参数发布到后端。如果您使用的是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字段。这是一种常见的解决方案,但是要注意的一件事是验证查询参数,因为现在您允许人们将值随机传递到您的页面上-这将被回发,您永远无法确保人们不会传递一些恶意值那边。
您可以进行
console.log(req.headers.referer);
在您的/third
视图中,它应该具有完整的先前URL,其中还包含您要查找的参数。