繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM