Javascript 当没有上传文件时,我使用busboy的应用程序冻结
我正在写一个接收表单的应用程序,我有一个小问题。当没有文件上传时,我的应用程序冻结。我不知道为什么。我使用connect busboy接收文件 这是我的密码:Javascript 当没有上传文件时,我使用busboy的应用程序冻结,javascript,node.js,file,multipartform-data,busboy,Javascript,Node.js,File,Multipartform Data,Busboy,我正在写一个接收表单的应用程序,我有一个小问题。当没有文件上传时,我的应用程序冻结。我不知道为什么。我使用connect busboy接收文件 这是我的密码: req.busboy.on('file', function(fieldname, file, filename) { switch(fieldname){ case 'mainPhoto': if(filename != '' &&a
req.busboy.on('file', function(fieldname, file, filename) {
switch(fieldname){
case 'mainPhoto':
if(filename != '' && filename != null && filename != "null") {
console.log("w mainPhoto w if'ie")
var n = filename.lastIndexOf(".");
var end = filename.substring(n+1, filename.length);
mainPhoto = "mh_" + id + "." + end;
fstream = fs.createWriteStream(__dirname + '/static/photos/' + mainPhoto);
file.pipe(fstream);
fstream.on('close', function() {
console.log("End of saving hospital's main photo.");
});
break;
}
else {
mainPhoto = null
break;
}
case 'photos':
if(filename != '' && filename != null && filename != "null") {
var n = filename.lastIndexOf(".");
var end = filename.substring(n+1, filename.length);
var photohoto;
photo = "h_" + id + "_" + photosCount + "." + end;
photos.push(photo);
fstream = fs.createWriteStream(__dirname + '/static/photos/' + photo);
file.pipe(fstream);
photosCount++;
fstream.on('close', function() {
console.log("End of saving hospital's main photo.");
});
break;
}
else {
break;
}
case 'priceList':
if(filename != '' && filename != null && filename != "null") {
var n = filename.lastIndexOf(".");
var end = filename.substring(n+1, filename.length);
priceList = "pricelist_" + id + "." + end;
fstream = fs.createWriteStream(__dirname + '/static/price_lists/' + priceList);
file.pipe(fstream);
fstream.on('close', function() {
console.log("End of saving hospital's price list.");
});
break;
}
else {
priceList = null;
break;
}
}
});
我必须添加所有文件以避免它,但这不是我想做的事情
感谢您的帮助。谢谢 在某个时候,您需要将响应发送回客户端。你遗漏了上传处理程序的其余部分,很难说这是否导致了你的问题。这就是我的全部功能:从“finish”开始的代码根本不会执行。TBH,我认为你应该重构你的代码,它太嵌套和复杂了。例如,可能是在数据库连接/查询完成之前调用了
finish
事件。另外,为每个请求创建一个新的数据库连接的性能不是很高,而且几乎总是不必要的(只需打开它一次,并在应用程序的生命周期内重用它),但关键是上传所有文件时一切正常,例如,当我只上传其中两个文件时,应用程序冻结。这很可能是由于finish
事件调用太快(因为busboy
与此无关),甚至在您为其设置处理程序之前。换句话说,它可能在您尚未侦听它的某个时间点触发(并且事件未“排队”或其他任何情况:如果没有侦听器,则事件将“丢失”)。