Node.js:res.redirect(“back”)得到错误('不能在发送之后设置头部')。

我有一个express.js应用程序的一个小问题。 在使用callback进行多个操作后,无法重新导向。

我的应用程序使用名为“标记”的对象,并按“子类别”进行评分。这些操作的目标是合并2个或更多个子类别,将所有标记从旧类别移动到新子类别,最后删除旧的子类别。

这里是代码:

检查2个或更多子类别后调用的操作:

exports.postMergeSubCategories = function(req, res) { "use strict"; var data = {}; data.subCategories = req.body.subCategoriesChecked; data.enName = req.body.subCategory.enName; data.frName = req.body.subCategory.frName; data.deName = req.body.subCategory.deName; if (data.subCategories.length > 1) { sscategoryMapper.merge(data, function(err, sscategory) { if (err) return console.log(err); console.log ('Sub categories merged !'); req.flash('mergeMessage', 'Merge completed!'); res.redirect("back"); }); } else { // error console.log('Error while merge sub categories. It seems the number of sub categories checked less 2'); req.flash('mergeMessage', 'An error occured whil merge'); res.redirect("back"); } }; 

函数sscategoryMapper.merge:

 module.exports.merge = function(data, callback) { async.waterfall([ function(callback){ // create new sub category save(data, function(err, sscategory) { if (err) return callback(err); callback(null, sscategory._id); }); }, function(sscategoryId, callback){ // update marker2sscategory async.each(data.subCategories.split('|'), function(oldSscategoryId, err) { // for each subcategories, update markers2sscategory and remove the old subcategory async.waterfall([ function(callback) { // update maker2sscategory to set the new sscategoryId to all target markers marker2sscategoryMapper.update(sscategoryId, oldSscategoryId, function(err) { if (err) return callback(err); callback(null, oldSscategoryId); }); }, function(oldSscategoryId, callback) { // delete the old sscategory remove(oldSscategoryId, function(err) { if (err) return callback(err); callback(); }); } ], function(err) { if (err) return callback(err); callback(); }); }, function(err) { callback(); }); callback(null, sscategoryId); } ], function (err, result) { if (err) return callback(err); callback(null, result); }); }; 

更新第一个问题在这里:我调用了2倍的callback…这段代码移动到:

  }, function(err) { callback(null, sscategoryId); }); } ], function (err, result) { if (err) return callback(err); callback(null, result); }); }; 

更新结束

函数marker2sscategoryMapper.update:

 module.exports.update = function(to, from, callback) { // update marker2sscategory with the new subcategory dbMarker2sscategory.update({'_sscategory' : from}, { '_sscategory' : to }, {multi: true}, function(err) { if (err) return callback(new Error(err)); callback(null, to); }); } 

而function删除:

 var remove = module.exports.remove = function(id, callback) { dbSscategory.remove({'_id' : id}, function(err) { if (err) return callback(new Error(err)); callback(null, id); }); }; 

如果我评论“res.redirect(”后退“),它将起作用。 否则,错误是:“错误(”发送后不能设置标题“);” 2次。

我读了其中一个原因可以重复callback…但我没有看到在我的代码。

感谢你的帮助。