在使用expressjs重定向之前更改POST数据?

时间:2017-05-23 12:42:06

标签: php node.js express http-headers requestjs

这基本上就是我的代码:

devDataSource
// 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内的回调内),然后,它应将POST标题更改为request.post(),重定向到{ test: 1234 }并在屏幕上显示file1.php

问题在于我无法让它在屏幕上显示该文本,看起来标题没有改变,或者我没有很好地改变它们。我该怎么办?

2 个答案:

答案 0 :(得分:1)

我认为您使用HTTP方法将标头与请求正文和标题名称混淆。

有了这个:

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

您只能更改响应标头,并且在执行重定向后不要告诉客户端使用此标头。

此外,设置名为POST的标头不会传递POST请求正文中该标头值的数据。

您似乎正在尝试在POST请求中使用正文中传递的某些字段进行重定向结果,但您在此处所做的是设置一个名为POST的标题,其中您可能希望在正文中设置。它不会这样工作。

正常重定向(301 Moved Permanently或302 Found)将始终产生GET请求,即使重定向是对POST的响应,因为在实践中301和302工作如303 See Other导致GET请求。有一个307临时重定向明确禁止更改HTTP方法,但浏览器应该在跟踪此类重定向之前警告用户,并且它可能并不总是有效。有关详细信息,请参阅此答案:

答案 1 :(得分:0)

在以这种方式重定向时,无法更改客户端的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';