Node.js报错Callback was already called问题求助(附代码)
代码格式化与初步排查建议
我明白你虽然知道这个问题已经有不少重复提问,但还是卡在解决步骤上了。先把你提供的代码格式化好,方便后续分析:
/** * DEFINE * @connection_kill */ apiRoutes.post('/balancer_connection_drop', function(req, res) { /* BALANCER - connection kill */ async.auto({ decrypt_kill: function(callback, drop, user, stream) { /* DROP - decrypt */ try { /* DEFINE - drop */ var drop = JSON.parse(decrypt(Object.keys(req.body)[0], encryption)); /* DROP - user & stream */ callback(null, drop['drop'], ... } catch (err) { // 建议补充错误捕获后的回调处理,避免请求挂起 callback(err); } } // 这里应该还有后续任务定义吧? }, function(err, results) { // 补充最终回调的错误与响应处理 if (err) { return res.status(500).json({ error: err.message }); } res.json({ success: true }); }); });
给你几个初步的排查方向,你可以逐一验证:
- 先确认
decrypt函数的返回值是否符合预期,有没有出现解密失败或返回非JSON格式字符串的情况——JSON.parse对格式要求严格,稍有偏差就会抛出异常 - 注意
async.auto的参数规则:任务函数的第一个参数是callback,后面的参数是提前定义完成的任务结果。你这里的decrypt_kill写了drop, user, stream作为参数,但如果没有在async.auto里提前定义这几个任务,这些参数会是undefined,这大概率会导致后续逻辑出错 - 检查
req.body的结构是否符合预期,Object.keys(req.body)[0]是否真的能拿到目标加密字段,有时候请求体解析失败(比如content-type设置错误)会导致获取不到正确数据 - 验证
encryption变量的配置是否正确,比如密钥、加密算法是否和加密端完全一致,密钥不匹配会直接导致解密失败
内容的提问来源于stack exchange,提问作者Igor Petev
相关产品推荐
相关产品推荐

