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