我正在尝试使用加密写入 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
提交
取消