在Node Express JS的请求正文中传递数组

时间:2020-06-19 19:41:20

标签: node.js mongodb express post mongoose

我有一个数组,我希望将其传递给POST请求的请求正文。如果成功,则应将新文档插入MongoDB。到目前为止,这是我的代码:

app.post(`/api/add`, async (req, res) => {
    collection.create( {  'id': req.body.id, 
                        'name': req.body.name, 
                        'date': req.body.date,
                        'groups': [
                            { 'id': req.body.groups.id, 'title': req.body.groups.title, 'teamMemberIds': [ req.body.groups.teamMemberIds] }]
                    }, 
    (err, result ) => {
        if (err) {
            console.log('error', err)
        } else {
            console.log('updated', result);
            res.status(200).send(result);
        }
    })
});

我是这样用邮递员发送请求正文的:

{
    "id": "1",
    "name": "Saved Team 1",
    "date": "1/1/20",
    "groups": [
        {"id": "group-1", "title": "test saved group 1", "teamMemberIds": ["bpumper", "jdoe"] },
        {"id": "group-2", "title": "test saved group 2", "teamMemberIds": ["bsimmons", "ljames"] },
    ]
}

这是我的猫鼬图式:

const savedTeamSchema = new Schema({
    id: String,
    name: String,
    date: String,
    groups: [{ id: String, title: String, teamMemberIds: [String]}]
})

但是,在执行请求之后,这是被插入到集合中的文档:

{
    "_id" : ObjectId("5eed13b216b4836f406b6f63"),
    "id" : "1",
    "name" : "Saved Team 1",
    "date" : "1/1/20",
    "groups" : [ 
        {
            "teamMemberIds" : [ 
                null
            ],
            "_id" : ObjectId("5eed13b216b4836f406b6f64")
        }
    ],
    "__v" : 0
}

我无法弄清楚如何将组对象添加到groups数组中。我想念什么?

1 个答案:

答案 0 :(得分:1)

 { 'id': req.body.groups.id, 'title': req.body.groups.title, 'teamMemberIds': [ req.body.groups.teamMemberIds] }]

您不能访问数组元素的字段,例如:req.body.groups.idreq.body.groups.titlereq.body.groups.teamMemberIDs。为了获得嵌套数组中的字段,您必须执行类似req.body.groups[index].id的操作。

但是不必做所有这些事情,因为您的req.body和猫鼬模式是相同的,因此您可以简单地将整个req.body.groups传递到groups中,如下所示。

app.post(`/api/add`, async (req, res) => {
    collection.create( {  'id': req.body.id, 
                        'name': req.body.name, 
                        'date': req.body.date,
                        'groups': req.body.groups //change this line of code.
                    }, 
    (err, result ) => {
        if (err) {
            console.log('error', err)
        } else {
            console.log('updated', result);
            res.status(200).send(result);
        }
    })
});

甚至更好的是,您可以将整个req.body添加到collection.create()

app.post(`/api/add`, async (req, res) => {
    collection.create(req.body, 
    (err, result ) => {
        if (err) {
            console.log('error', err)
        } else {
            console.log('updated', result);
            res.status(200).send(result);
        }
    })
});

如果req.body和猫鼬模式具有不同的格式,那么对于数组部分,可以使用数组方法map在创建文档之前更改数组格式。