Nodejs express bodyParser 删除对象键
Nodejs express bodyParser drops object keys
我正在使用 nodejs express 4.16.3 和 body-parser 1.18.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' 被转换成数组并且它们丢失了它们的键..
我的 app/ajax 设置中是否遗漏了什么?
难道你没有发送有效的JSON?
试试这个。你有一个额外的逗号。
{"nametest":{
"lov":{"2":{"val":"15"}},
"gte":{"2":{"val":"9"}}
}}
在您的 AJAX 请求中,您需要将您的负载字符串化。
function sendobj (datapack) {
console.log(JSON.stringify(datapack))
$.ajax({
url: '/save',
method: "POST",
data: JSON.stringify(datapack),
success: function(results) {
alert(results.status)
}
});
}
在 express 中,确保添加 application/json
类型。如
app.use(bodyParser.json({ type: 'application/json' }))
然后注销nametest。 req.body.nametest
这是我得到的输出
{ lov: { '2': { val: '15' } }, gte: { '2': { val: '9' } } }
希望对您有所帮助
我正在使用 nodejs express 4.16.3 和 body-parser 1.18.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' 被转换成数组并且它们丢失了它们的键..
我的 app/ajax 设置中是否遗漏了什么?
难道你没有发送有效的JSON?
试试这个。你有一个额外的逗号。
{"nametest":{
"lov":{"2":{"val":"15"}},
"gte":{"2":{"val":"9"}}
}}
在您的 AJAX 请求中,您需要将您的负载字符串化。
function sendobj (datapack) {
console.log(JSON.stringify(datapack))
$.ajax({
url: '/save',
method: "POST",
data: JSON.stringify(datapack),
success: function(results) {
alert(results.status)
}
});
}
在 express 中,确保添加 application/json
类型。如
app.use(bodyParser.json({ type: 'application/json' }))
然后注销nametest。 req.body.nametest
这是我得到的输出
{ lov: { '2': { val: '15' } }, gte: { '2': { val: '9' } } }
希望对您有所帮助