簡體   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