You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:42:10