Javascript 返回';未定义';尝试访问express上的表单数据文件时

Javascript 返回';未定义';尝试访问express上的表单数据文件时,javascript,reactjs,express,axios,form-data,Javascript,Reactjs,Express,Axios,Form Data,为此,我使用express.js,react,借助表单数据 无论我尝试什么,当我从前端向服务器发送文件时,服务器总是说它未定义 在react中,代码如下所示: onSubmit = () => { const url = '../api/products/file'; const formData = new FormData(); formData.append('file', this.state.file) const

为此,我使用express.js,react,借助表单数据

无论我尝试什么,当我从前端向服务器发送文件时,服务器总是说它未定义

在react中,代码如下所示:

onSubmit = () => {
        const url = '../api/products/file';
        const formData = new FormData();
        formData.append('file', this.state.file)
        const config = {
            headers: {
                'content-type': 'multipart/form-data'
            }
        }
        console.log(formData);
        axios.post(url, formData, config)
        .then(res => {
            console.log(res.statusText)
        })
    }
router.post('/file', (req,res) => {
    console.log("FILE");
    console.log(req.file);
    console.log(req.body);
    upload(req, res, function (err) {
        if (err instanceof multer.MulterError) {
            return res.status(500).json(err)
        } else if (err) {
            return res.status(500).json(err)
        }
    return res.status(200).send(req.file)
    })
});
我知道计算机有该文件,因为this.state.file返回该文件中的所有相关信息。 为了便于参考,在console.log(formData)行中,我在控制台中收到了这个消息。

在express中,代码如下:

onSubmit = () => {
        const url = '../api/products/file';
        const formData = new FormData();
        formData.append('file', this.state.file)
        const config = {
            headers: {
                'content-type': 'multipart/form-data'
            }
        }
        console.log(formData);
        axios.post(url, formData, config)
        .then(res => {
            console.log(res.statusText)
        })
    }
router.post('/file', (req,res) => {
    console.log("FILE");
    console.log(req.file);
    console.log(req.body);
    upload(req, res, function (err) {
        if (err instanceof multer.MulterError) {
            return res.status(500).json(err)
        } else if (err) {
            return res.status(500).json(err)
        }
    return res.status(200).send(req.file)
    })
});

我这里的问题是,我的
req.file
返回'undefined',而我的
req.body
返回{},这表明文件甚至没有到达服务器。我认为要么文件没有通过附加正确地传递到表单数据,要么它在传递到服务器的过程中不知何故丢失了,我认为这是极不可能的。我已经查看了Axios请求的每一行,其中没有关于文件的详细信息。

您使用body parser了吗?实际上
console.log(formData)
没有告诉您是否加载了文件。FormData只是一个JS对象,已打印到控制台。要确保文件在那里,您必须至少检查
console.log(this.state.file)
console.log(formData.get('file')
,并检查是什么there@Rostyslav谢谢,我不知道这件事!我做了formData.get('file'),它看起来确实在加载。你使用了主体解析器吗?实际上是
console.log(formData)
不会告诉您加载文件与否。FormData只是一个打印到控制台的JS对象。要确保该文件存在,您必须至少
console.log(this.state.file)
console.log(FormData.get('file'))
然后检查是什么there@Rostyslav谢谢,我不知道这件事!我做了formData.get('file'),它出现了,所以它肯定正在加载。