[英]Change POST data before redirecting with 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
按钮时,它应使用{ test: "mytest" }
作为http://localhost:1234
发布标头将发布请求发送回file1.php
。 file1.php
对发布请求执行某些操作,并将响应发送回http://localhost:1234
(在request.post()
的回调内部),然后,应将POST标头更改为{ test: 1234 }
,并重定向到file1.php
并在屏幕上显示Array([test]=>1234) [Register button]
。
问题是我无法使它显示在屏幕上,似乎标题没有更改或我没有很好地更改它们。 我能做什么?
我认为您正在将标头与请求正文和标头名称与HTTP方法混淆。
有了这个:
res.set("POST", "test=1234");
您只能更改响应标头,而不能在重定向之后告诉客户端使用此标头。
同样,设置名为POST的标头不会传递该标头的值放入POST请求正文中的数据。
似乎您正在尝试在POST请求中使用正文中传递的某些字段来产生重定向结果,但是您在此处所做的是设置了一个名为POST的标头,并可能希望在正文中进行设置。 它不会以这种方式工作。
即使重定向是对POST的响应,正常重定向(“永久移动301”或“找到302”)也始终会导致GET请求,因为在实践中301和302的工作方式类似于303 See Other,从而导致GET请求。 307临时重定向明确禁止更改HTTP方法,但浏览器应在遵循此类重定向之前向用户发出警告,并且它可能并不总是有效。 查看此答案以获取更多详细信息:
以这种方式重定向时,无法更改客户端的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';
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.