Javascript 上传一个文件时,Req.files.file.length未定义

Javascript 上传一个文件时,Req.files.file.length未定义,javascript,node.js,reactjs,express,Javascript,Node.js,Reactjs,Express,我正在使用Reactjs/Node.js/Expressjs上传多个文件 我可以将多个文件上载到后端的上载目录和数据库 但当我尝试只上传一个文件时,什么也没发生 在前面,文件被正确选择,当我得到console.logthis.state.selectedFile.length为1时,它可以工作 但是在后端,当我使用console.logmyFile.length时,我没有定义。如果我上传2个或更多文件,console.log会显示正确的长度,我不知道为什么 我的代码后端 如果您想要更多的代码/解

我正在使用Reactjs/Node.js/Expressjs上传多个文件

我可以将多个文件上载到后端的上载目录和数据库

但当我尝试只上传一个文件时,什么也没发生

在前面,文件被正确选择,当我得到console.logthis.state.selectedFile.length为1时,它可以工作

但是在后端,当我使用console.logmyFile.length时,我没有定义。如果我上传2个或更多文件,console.log会显示正确的长度,我不知道为什么

我的代码后端

如果您想要更多的代码/解释,请随时询问

const myFile = (Array.isArray(req.files.file)?req.files.file:[req.files.file]).filter(e=>e);
    // filter is important, so that you have [] instead of [undefined] if req.files.file is undefined

可能会这样做,因为一个文件可能是对象,而多个文件可能是数组。所以技巧是重新考虑数组的非数组

如果只有1个元素,那么req.files.file不是数组

它起作用了!谢谢你能解释一下为什么我的方法不起作用吗?当你只收到一个文件时,你只收到了一个对象。解析程序有问题,这个技巧是将这个对象重新定义为一个由1个项目组成的数组,我在未定义值的情况下添加了一个过滤器。好吧,我不知道
const myFile = (Array.isArray(req.files.file)?req.files.file:[req.files.file]).filter(e=>e);
    // filter is important, so that you have [] instead of [undefined] if req.files.file is undefined