繁体   English   中英

无法发出包含节点中数组的发布请求

[英]Cannot make post request containing an array in node

我是一个初学者,已经为这个问题困扰了我好几天,而这个问题我真的很坚持。

基本上,我只想使用node和express发出发布请求。 该对象将动态创建,但这是我的硬编码示例。 myObj包含一个数组,因为稍后我想在服务器端为每个项目向数据库中插入一个。

let myObj = {
        id: 50,
        damage_type: ["missing", "broken", "light"]
      }

// Parse myObj to JSON string to be sent
let myjsonObj = JSON.stringify(myObj);
console.log(myjsonObj );
// {"poi":50,"damage_type":["missing","broken","light"]}
postDamage(myjsonObj )

function postDamage(damage) {
  $.post({
    type: 'POST',
    url: '/damage',
    data: damage
  }).
  done(function (damage) {
    // Do things
}


router.post('/damage', (req, res) => 
{ 
  let data = req.body;
  console.log(data)

// This is what I get in the node terminal which is nonsense, I cannot work with 
{ '{"id":50,"damage_type":["missing","broken","light"]}': '' }

I expect it to look like {"id":50,"damage_type":["missing","broken","light"]}
So I can loop through the damage_type creating new objects with this structure
createSQLfunction({id:50, damage_type:"missing"})

});

如果我{poi:'50', 'damage_type[]: [ 'missing','broken','light']} myObj进行字符串化,则节点终端将打印{poi:'50', 'damage_type[]: [ 'missing','broken','light']}多余的[]来自哪里?

我无法将对象内部的数组发送到服务器端在做什么?

从jquery网站:

数据

类型:PlainObject或字符串或数组

数据要发送到服务器。 如果还不是字符串,则将其转换为查询字符串。 它被附加到GET请求的URL上。 请参阅processData选项以防止这种自动处理。 对象必须是键/值对。 如果value是一个Array,则jQuery会根据传统设置(如下所述)的值,使用相同的键序列化多个值。

traditional设置似乎是将其url编码为key[]=val1&key[]=val2还是仅仅是key=val1&key=val2 您可以尝试一下,YMMV。

或者,您可以使自己的生活变得更轻松,只需自己序列化json,而不用弄乱jquery的url编码。

*编辑:为回答有关最佳做法的问题:在JavaScript表单提交流行之前,提交表单的两种标准方法是application/x-www-form-urlencodedmultipart/form-data 如果您有要使用表单提交的文件,则通常使用后者。

但是,随着JavaScript XHR(ajax)表单提交的出现,使用JSON代替这些格式中的任何一种已经变得越来越普遍/流行。 因此,执行data: JSON.stringify(object)类的操作绝对没有任何错误data: JSON.stringify(object)提交数据后, data: JSON.stringify(object) ,然后仅指示服务器读取JSON。

实际上,它可能既容易又快速。 这是一种非常流行的方法,因此不必担心会违反现代最佳实践。

暂无
暂无

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

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