[英]How can I redirect to URL after variable value is loaded?
我在 Node 中有一個帶有 Express 的應用程序,並試圖成功完成一個名為“Flow”的支付系統的實施。
[編輯]我繞過了一些非常重要的東西,它是一個 function ,它包裝了在方法結束后觸發的功能。 我嘗試讓它異步,這樣我就可以將函數包裝為 promise,就像有人建議的那樣,但出現了一些錯誤。 我會重新檢查。
//REALIZAR PAGO $
app.post('/realizarPago', function(req, res){
var amount = Math.floor(Math.random() * 999999) + 100000;
var paymentMethod = 9;
var urlRedirect = "https://sandbox.flow.cl/app/web/pay.php?token=";
...
//Other relevant variables
var req = https.request(options, function (res) { //<=== This one
res.on("data", function (chunk) {
chunks.push(chunk);
});
res.on("end", function (chunk) {
...
//this is just a sample token that I'll later capture from response
urlRedirect = urlRedirect+"1234567890";
});
});
var postData = qs.stringify({
'flowOrder': flowOrder,
'amount': amount,
...
});
req.write(postData);
res.redirect(307, urlRedirect);
req.end();
});
一切正常,問題是在 urlRedirect 更新其值之前執行重定向urlRedirect = urlRedirect+"1234567890";
我在res.write(postData)
執行后嘗試了 .then .then()
) ,但沒有有用的結果。 我幾乎在每種方法中都嘗試過.then()
,我也嘗試過使用res
而不是req
,反之亦然。 我也做了一些研究,發現了一個有趣的東西,稱為異步方法的“瀑布”,但在res.on
方法的情況下,無法想象一種封裝它的方法。
接下來我可以嘗試什么?
[編輯 2 ] 感謝您的所有指導,我能夠使用一些承諾並更改執行順序。 現在它正在做我需要的事情,現在它說 https 請求中缺少一些參數。 我必須解決這個問題。 最終代碼是:
//REALIZAR PAGO $
app.post('/realizarPago', async function(request, response){
var amount = Math.floor(Math.random() * 999999) + 100000;
var paymentMethod = 9;
...
//Other relevant variables
var urlRedirect = "https://sandbox.flow.cl/app/web/pay.php?token=";
var req = https.request(options, (res) => {
var chunks = [];
res.on("data", (chunk) => {
chunks.push(chunk);
});
res.on("end", (chunk) => {
var body = Buffer.concat(chunks);
var datos = body.toString();
datos = JSON.parse(datos);
var token = datos.token;
urlRedirect = urlRedirect+token
response.redirect(urlRedirect);
});
});
req.end();
var postData = qs.stringify({
'flowOrder': flowOrder,
'amount': amount,
...
});
req.write(postData);
req.end();
});
您將重定向放入end
事件處理程序中,並且您還添加了一個錯誤處理程序以防請求失敗並且您更改了兩個res
arguments 之一的名稱,這樣它們就不會發生沖突,您仍然可以訪問它們。 我將更高級別的一更改為response
,以便可以在其他已定義res
的回調中使用它:
//REALIZAR PAGO $
app.post('/realizarPago', function(req, response){ // <== change arg name to response
var amount = Math.floor(Math.random() * 999999) + 100000;
var paymentMethod = 9;
var urlRedirect = "https://sandbox.flow.cl/app/web/pay.php?token=";
...
//Other relevant variables
res.on("data", function (chunk) {
chunks.push(chunk);
});
res.on("end", function (chunk) {
...
//this is just a sample token that I'll later capture from response
urlRedirect += "1234567890";
response.redirect(307, urlRedirect); // <== move this here
});
});
req.on('error', err => { // <== add this
console.log(err);
response.sendStatus(500);
});
var postData = qs.stringify({
'flowOrder': flowOrder,
'amount': amount,
...
});
req.write(postData);
req.end();
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.