busboy モジュールを使用してファイルをアップロードしています。1つのファイルに対して非常にうまく機能します。ただし、複数のファイルをアップロードしようとすると、次のエラーがスローされます。
Error: Can't set headers after they are sent
スローエラーの理由はわかっていますが、解決策がわかりません。以下は私のコードスニペットです。
exports.uploadFile = function (req, res) {
console.log('Calling uploadFile inside FileUploadService');
var fstream;
req.pipe(req.busboy);
req.busboy.on('file', function (fieldName, file, fileName) {
// Get folderGuid
var folderGuid = req.params.folderGuid;
//Get folderName
var folderName = req.query.folderName;
//path of file contents
var directoryPath = fileRepositoryPath + "/" + folderGuid+"/"+folderName;
//Get location
var filePath = directoryPath + "/" + fileName;
log.debug("inside FileUploadService ::: uploadFile >> folderGuid: " + folderGuid + ", directoryPath : " + directoryPath + ", filePath : " + filePath);
//Create directory
nodefs.mkdir(directoryPath, 0777, true, function (err) {
if (err) {
log.error({err: err}, 'Error while creating recurrisve directory');
} else {
log.debug('inside FileUploadService ::: uploadFile >> Directory created');
}
//Write object on file system
fstream = nodefs.createWriteStream(filePath);
file.pipe(fstream);
fstream.on('close', function (err) {
if (!err) {
var relativePath = "/" + folderGuid + "/" + fileName;
log.info('Successfully uploaded file relativePath >> '+relativePath);
res.status(constants.HTTP_CODE_OK);
res.json({"relativePath": relativePath});
} else {
log.error({err: err}, 'Failed to upload file');
res.status(constants.HTTP_CODE_INTERNAL_SERVER_ERROR);
res.json({error: err});
}
});
});
});
};
次のコード行がエラーをスローしていることはわかっています。これは、複数のファイルの場合、このコード行が 2 回実行されてエラーが発生するためです。
res.status(constants.HTTP_CODE_OK);
res.json({"relativePath": relativePath});
「 」の複数のイベントを追跡req.busboy.on('file', function (fieldName, file, fileName)
して、すべてのファイル処理が終了したら、私だけが応答を送信するようにするにはどうすればよいですか?
助けてください。