Node/Express/MongoDB: POST 嵌入对象 returns 空
Node/Express/MongoDB: POST embedded object returns null
我有一条简单的POST
路线:
// -------------- CREATE Event --------------
app.post('/events', (req, res) => {
var event =
{
title : req.body.title,
description : req.body.description,
address : {
street: req.body.address.street,
city : req.body.address.city,
state : req.body.address.state
}
}
db.collection('events').insert( event, (err, result) => {
if (err) {
res.send({ 'error': 'An error has occurred' })
}
else {
// RETURNS: "{street : \"streetname\", city : \"cityname\", state : \"statename\"}"
console.log(JSON.stringify( req.body.address ))
// RETURNS: {"title":"First Event","description":"this is my first event title","address":{},"_id":"591f512b15d612fc110dd31f"}
console.log(JSON.stringify(result.ops[0]))
res.send(result.ops[0])
}
})
// RETURNS: {street : "streetname", city : "cityname", state : "statename"}
console.log(req.body.address)
})
当我通过 Postman 提交 POST 请求时...
...嵌入对象的值在创建时为 null,但 .insert()
方法之外的 req.body.address
显示 ` 是完整的。
{
"_id" : ObjectId("591f49519eb9e5facb6352fe"),
"title" : "First Event",
"description" : "this is my first event title",
"address" : {
"street" : null,
"city" : null,
"state" : null
}
}
tl;dr 我如何才能将嵌入对象发送到 MongoDB 而嵌入对象的值不会变为 null?
注释:
- 是的,我包括
app.use(bodyParser.json())
和 app.use(bodyParser.urlencoded({ extended: true }))
- 使用最新版本的 body-parser、express 和 mongodb
- 在 Postman 的数据类型上使用
x-www-form-urlencoded
错误不在代码中,而是在 Postman 中。要发送复杂的 object,例如嵌套的 JSON object,您必须更改 Postman 请求的一些细节:
改变你的Headers
Content-Type
: application/json
Accept
: application/json
更改Body
内的data-type
- 切换到
raw
radio-button
- 将类型更改为:
JSON(application/json)
tl;dr 记得在发送 POST 请求时更改 JSON 的 Postman 配置
我有一条简单的POST
路线:
// -------------- CREATE Event --------------
app.post('/events', (req, res) => {
var event =
{
title : req.body.title,
description : req.body.description,
address : {
street: req.body.address.street,
city : req.body.address.city,
state : req.body.address.state
}
}
db.collection('events').insert( event, (err, result) => {
if (err) {
res.send({ 'error': 'An error has occurred' })
}
else {
// RETURNS: "{street : \"streetname\", city : \"cityname\", state : \"statename\"}"
console.log(JSON.stringify( req.body.address ))
// RETURNS: {"title":"First Event","description":"this is my first event title","address":{},"_id":"591f512b15d612fc110dd31f"}
console.log(JSON.stringify(result.ops[0]))
res.send(result.ops[0])
}
})
// RETURNS: {street : "streetname", city : "cityname", state : "statename"}
console.log(req.body.address)
})
当我通过 Postman 提交 POST 请求时...
...嵌入对象的值在创建时为 null,但 .insert()
方法之外的 req.body.address
显示 ` 是完整的。
{
"_id" : ObjectId("591f49519eb9e5facb6352fe"),
"title" : "First Event",
"description" : "this is my first event title",
"address" : {
"street" : null,
"city" : null,
"state" : null
}
}
tl;dr 我如何才能将嵌入对象发送到 MongoDB 而嵌入对象的值不会变为 null?
注释:
- 是的,我包括
app.use(bodyParser.json())
和app.use(bodyParser.urlencoded({ extended: true }))
- 使用最新版本的 body-parser、express 和 mongodb
- 在 Postman 的数据类型上使用
x-www-form-urlencoded
错误不在代码中,而是在 Postman 中。要发送复杂的 object,例如嵌套的 JSON object,您必须更改 Postman 请求的一些细节:
改变你的Headers
Content-Type
:application/json
Accept
:application/json
更改Body
内的data-type- 切换到
raw
radio-button - 将类型更改为:
JSON(application/json)
- 切换到
tl;dr 记得在发送 POST 请求时更改 JSON 的 Postman 配置