Node.js Express bodyParser丢弃对象键

时间:2018-12-14 03:11:14

标签: node.js ajax express server body-parser

我正在使用带有主体解析器1.18.3的nodejs express 4.16.3

我正在通过ajax从前端向服务器发送JSON对象,以将其另存为.json文件。

这里是我的前台代码:

function sendobj (datapack) {
  console.log(JSON.stringify(datapack))
  $.ajax({
    url: '/save',
    method: "POST",
    data: datapack,
    success: function(results) {
      alert(results.status)
    }
  });
}

触发此功能和ajax调用后的控制台输出

{"nametest":{
"lov":{"2":{"val":"15"}},
"gte":{"2":{"val":"9"}},
}}

至此,一切正常-“ lov”和“ gte”是对象,根据需要都带有键“ 2”。

但是在服务器端,有我的应用代码:

 var express = require('express');
    var app = express();
    var bodyParser = require('body-parser');

    app.use(bodyParser.json());
    app.use(bodyParser.urlencoded({ extended: true }));

    app.post('/save', async (req, res) => {
      try {
      console.log(req.body)

      await fs.writeFile('output.json', JSON.stringify(req.body), function(err) {
    if (err) {
      res.send({
        status: 'Error!'
      })
      return
    }

    res.send({
      status: 'Saved!'
    })

  });

} catch (e) {
  console.log(e)
}
});

服务器控制台输出:

{ nametest:
{ gte: [ { val: '9' } ],
  lov: [ { val: '15' } ]
   } }

output.json

{"nametest":{"gte":[{"val":"9"}],"lov":[{"val":"15"}]}}

似乎我的主要对象'gte'和'lov'被转换为数组,并且丢失了密钥。

我在我的应用程序/ ajax设置中缺少什么吗?

2 个答案:

答案 0 :(得分:1)

可能是您没有通过有效的JSON发送吗?

尝试一下。您还有一个逗号。

{"nametest":{
"lov":{"2":{"val":"15"}},
"gte":{"2":{"val":"9"}}
}}

答案 1 :(得分:0)

在AJAX请求中,您需要对有效负载进行字符串化。

function sendobj (datapack) {
  console.log(JSON.stringify(datapack))
  $.ajax({
  url: '/save',
  method: "POST",
  data: JSON.stringify(datapack),
  success: function(results) {
    alert(results.status)
  }
  });
}

明确地说,请确保添加application/json类型。如

app.use(bodyParser.json({ type: 'application/json' }))

然后注销名称测试。 req.body.nametest 这是我得到的输出

{ lov: { '2': { val: '15' } }, gte: { '2': { val: '9' } } }

希望有帮助

相关问题