将数据附加到 node.js 中的 formData ...我发布到我的 api 的数据总是显示为空?

Posted

技术标签:

【中文标题】将数据附加到 node.js 中的 formData ...我发布到我的 api 的数据总是显示为空?【英文标题】:Appended data to formData in node.js...the data which i am posting to my api is always showing null? 【发布时间】:2021-03-21 12:08:03 【问题描述】:

最近我试图通过异步进程将大量 html 表单值附加到 MongoDB 数据库

这个 const createproperty 是我在数组中获取的 MongoDB 字段

 const createProperty =  ['propertyType',
                      'propertyName',
                      'bhkType',
                      'ownershipType',
                      'builtUpArea',
                      'propertyAge',
                      'floorType',
                      'floorNumber',
                      'numberOfFloors',
                      'city',
                      'expectedPrice',
                  ]

.. 这些 id 是我放入数组中的 HTML 表单中的一些 id

const myids = ['#thisPropertyType',
            '#thisPropertyName',
            '#thisBhk',
            '#thisOwnerShip',
            "#thisArea",
            '#thisAge',
            '#thisFloor',
            '#thisFloorNo',
            '#thisTotalFloor',
            '#thisCity',
            '#thisEp', ] 

这个新属性会给我 Html 表单的值,所有的值都以数组的形式存储,这个 for 循环工作得很好,完美地给了我所有的表单值

const newProperty = new Array();
    for(var i=0;i<myids.length;i++)
        newProperty[i] = $(myids[i]).val();
    

             const form = new FormData();
            for(var i=0;i<newProperty.length;i++)
                form.append(createProperty[i],newProperty[i]);
            
            await createData(form);

这是跟随异步进程的函数

       export const createData = async (data) => 
try
    for (var value of data.values()) 
        console.log(value); 
     
    const res = await axios(
        method: 'POST',
        url: '/api/v1/myapi',
        data
    );

    if(res.data.status==='success')
       alert('success');
    
    console.log(data);

catch(err)
    alert('error');

我 console.logged 来自 createdata 函数的值,它完美地为我提供了值,但它没有将值推送到 mongodb 服务器,当我查看集合时,有一个文档已创建但它没有里面的数据..

请帮助我哪里做错了,我不知道我哪里做错了..

非常感谢你帮助我!!

【问题讨论】:

【参考方案1】:

axios 期望数据是 JSON 对象而不是 FormData

这将使用来自 createProperty 数组的键将正文构造为 JSON

const data = ;
myids.forEach((id, index) => 
    data[createProperty[index]] = $(myids[i]).val();
)

那么你可以直接通过axios发送这些值

await createData(data)

【讨论】:

我必须告诉你......上帝就是你......非常感谢你拉米 你好,我正在尝试使用上面相同的代码发送图像,但不知何故它显示了这个错误..请你帮我..错误:图像:转换为 [字符串] 失败路径“images”图像中的“[]”是架构字段

以上是关于将数据附加到 node.js 中的 formData ...我发布到我的 api 的数据总是显示为空?的主要内容,如果未能解决你的问题,请参考以下文章

docker-compose 用于将 VS Code 中的 node.js 调试器附加到 WSL docker 中的节点进程

Node.js 调试 - 无法附加调试器子进程

Node.js 和 Nodemailer:我们可以将 PDF 文档附加到电子邮件中吗?

使用 sendgrid 和 node.js 将日志文件附加到电子邮件

如何在 Node.js 的一个 json 中附加两个查询结果

如何在 formData 对象中附加文件而不在 Node.js 中物理保存文件?