繁体   English   中英

使用 formData 将数组发送到节点作为对象

[英]Sending array to node is taken as object using formData

我正在执行更新,除了其他数据外,我还需要向 Node 发送一个数组,其中包含一个或多个图像的信息,但只有它们的路径和 ID,而不是图像本身。

我正在执行更新,除了其他数据外,我还需要向 Node 发送一个数组,其中包含要删除的一个或多个图像的信息,但我只传递了它的路径和 ID,而不是图像本身,因为图像在 Cloudinary 中。

我使用 formData 是因为在这些数据中我发送新图像以防需要新图像,但我收到了除了要删除的图像之外的所有数据,因为我没有接收数组,而是只接收 [Object Object] 并且我无法工作用它。 这是我的代码:


    const putProduct = async (productToUpdate, filesToDelete) => {

        console.log(filesToDelete) // Array

        const formData = new FormData()
        const imageArr = Array.from(productToUpdate.pictures)

        imageArr.forEach(image => {
          formData.append('pictures', image)
        })

        formData.append('filesToDelete', filesToDelete)
        formData.append('barCode', productToUpdate.barCode)

        try {
            const dataOnLs = localStorage.getItem('cmtjs')
            const config = {
                headers: {
                    "Content-Type": "multipart/form-data",
                    apiKey: dataOnLs
                }                
            } 

            const { data } = await axiosClient.put(`/products/${productToUpdate.id}`, formData, config )

filesToDelete - 从 React 发送的数组

我在 Node 中收到并通过控制台req.body.filesToDelete但它总是指示 [Object Object]

let updateProduct = async ( req, res = response ) => {


    const filesToDelete = req.body.filesToDelete;
    console.log(filesToDelete); // [object Object]
    return

控制台中节点的响应

FormData 要求对象是字符串。 以下是替代品:

前端
代替:

formData.append('filesToDelete', filesToDelete)

和:

formData.append('filesToDelete', JSON.stringify(filesToDelete))

后端
代替:

const filesToDelete = req.body.filesToDelete

和:

const filesToDelete = JSON.parse(req.body.filesToDelete)

您应该像对待productToUpdate.pictures一样对待filesToDelete数组。

如果您希望filesToDeletereq.body.filesToDelete中显示为数组,请使用此...

filesToDelete.forEach((f) => {
  formData.append("filesToDelete", f);
});

Multer 自动将重复字段作为数组处理。 您可以选择将[]添加到字段名称中,以便在代码中清晰...

formData.append("filesToDelete[]", f);

但结果是一样的。


在客户端,您可以删除内容类型标头。 您的浏览器会自动为您处理

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM