至尊寶的傳說
2023-06-29 20:55:30
我正在嘗試使用加密寫入 MD5 哈希令牌的標頭,然后將其作為響應返回。由于某種原因,它實際上并未同步運行。我知道 JS 是一種異步語言,這確實是我現在唯一遇到困難的部分。任何幫助,將不勝感激。這是我到目前為止所擁有的:const crypto = require('crypto');const bodyParser = require('body-parser');const formidable = require('formidable');const async = require('async')app.post('/pushurl/auth', (req, res) => var data = req.body.form1data1 + '§' + req.body.form1data2 async.waterfall([ function(callback) { var token = crypto.createHash('md5').update(data).digest("hex"); callback(null, token); }, function(token, callback) { res.writeHead(301, {Location: '/dashboard?token=' + token} ); callback(null) }, function(callback) { res.end(); callback(null) } ]); }});輸出:Uncaught Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client<node_internals>/internal/errors.js:256 No debugger available, can not send 'variables'Process exited with code 1
1 回答

慕哥6287543
TA貢獻1831條經驗 獲得超10個贊
是的,JavaScript 是一種異步語言,但它也可以很好地完成同步任務。就您而言,如果您正在處理承諾,則不需要執行任何異步預期。
如果您像下面的示例一樣編寫代碼,它將只會從上到下執行。
但是發生錯誤(可能)是因為您忘記在回調中添加左花括號app.post,這導致datavar 由于隱含的 return 語句() => (隱式)、() => {}(顯式)而立即返回。
const crypto = require('crypto');
const bodyParser = require('body-parser');
const formidable = require('formidable');
app.post('/pushurl/auth', (req, res) => {
const data = req.body.form1data1 + '§' + req.body.form1data2;
const token = crypto.createHash('md5').update(data).digest("hex");
res.writeHead(301, {
Location: '/dashboard?token=' + token
});
res.end();
});
添加回答
舉報
0/150
提交
取消