当我在本地:8000服务器上运行这些东西时没有问题。
我正在使用firebase托管,其中我已经由nodejs express app部署。当我从客户端提交多部分表单时,它会给我空的req.body和req.file。我正在使用multer来处理多种数据。
app.post('/' , multer({ dest: os.tmpdir() , limits : { fileSize : 5242880 } }).single('image_file'), (req , res)=>{
console.log("req.body : " , req.body) ;
console.log("req.file : " , req.file) ;
如何解决这个问题?为什么会这样? 我试过给#34; {dest:" data /" }"其中存在名为data的文件夹。但这似乎也不起作用
这是我在客户端的代码: -
<form method="post" action="/sendnotification" encType="multipart/form-data">
<--SOME FORM ELEMENTS-->
</form>
$("form").on('submit' , e=>{
e.preventDefault() ;
$('button[type=submit]').hide() ;
$("#loader_circle").removeAttr("hidden") ;
postdata = new FormData() ;
$('form').serializeArray().map(ele=> { if(ele.name!='topic') postdata.append(ele.name , ele.value) }) ;
topicslist = [] ;
$("input:checkbox[name=topic]:checked").each(function(){
topicslist.push($(this).val());
});
postdata.append('topic' , topicslist) ;
postdata.append('image_file', document.getElementById('file_image').files[0] ) ;
console.log(postdata.entries()) ;
$.ajax({url : '/sendnotification' ,
type: "post" ,
method:'post' ,
cache: false ,
contentType:false ,
data : postdata ,
processData:false,
success: (data , status , jqxhr_obj)=>{
if(data.success)
{
console.log('success') ;
$('#successalert').html(`<h3 class="text-center">${data.success}</h3>`)
$('#successalert').replaceWith($("#successalert").clone().removeAttr('hidden')) ;
document.querySelector("form").reset() ;
fadeElementAfter("#successalert" , 5000) ;
}
else{
console.log('error') ;
$('#erroralert').html(`<h3 class="text-center">${data.error}</h3>`)
$('#erroralert').replaceWith($("#erroralert").clone().removeAttr('hidden')) ;
fadeElementAfter("#erroralert" , 4000) ;
}
$('button[type=submit]').show() ;
$("#loader_circle").attr('hidden' , true) ;
} ,
error : (jqXHR, textStatus, errorThrown )=>{
console.log(jqXHR , textStatus , errorThrown) ;
$('#erroralert').html(`<h3 class="text-center">${data.error}</h3>`)
$('#erroralert').replaceWith($("#erroralert").clone().removeAttr('hidden')) ;
fadeElementAfter("#erroralert" , 4000) ;
}
}) ;
})