【问题标题】:Change POST data before redirecting with expressjs?在使用 expressjs 重定向之前更改 POST 数据?
【发布时间】:2017-05-23 12:42:06
【问题描述】:

这基本上是我的代码:

// 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 处理该 post 请求并将响应发送回http://localhost:1234(在request.post() 的回调中),然后,它应该将 POST 标头更改为 { test: 1234 },重定向到 file1.php 并显示 @987654333 @在屏幕上。

问题是我无法让它在屏幕上显示该文本,似乎标题没有改变或者我没有很好地改变它们。我能做什么?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      我认为您将标头与请求正文和标头名称与 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 方法,但浏览器应在遵循此类重定向之前警告用户,并且它可能并不总是有效。有关详细信息,请参阅此答案:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-07-10
        • 1970-01-01
        • 2011-09-30
        • 2021-03-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多