NodeJS后端POST数组项?

时间:2016-09-03 20:37:48

标签: javascript json node.js

示例JSON数据,向您展示我的MongoDB的排列方式:

{
"state" : "California"
"person" [{"name": "Bob"}, {"name": "Bill"}]
}

我的HTML中包含以下POST值namestate的输入表单:

<input type="text" name="state" />
<input type="text" name="name"/>

现在,为了处理这个POST,我的Node路由代码安排如下:

router.post('/profile', function(req, res, next) {
  User.findOne({ _id: req.user._id }, function(err, user) {

    if (err) return next(err);
    /*first action*/ 
    user.state = req.body.state;
    /*second action*/
    user.person.name = req.body.name; 

    user.save(function(err) {
      if (err) return next(err);
      req.flash('success', 'Purchase successful');
      return res.redirect('/profile');
    });
  });
});

这是意味着要发生的事情。首先,在输入和提交state后,状态(如我的数据库中所示)将更改为用户输入的内容。这按预期工作。

其次,在输入和提交name后,应该在阵列中添加新的name

第二个动作不起作用。我尝试用push和for循环替换代码,如下所示:

for (var i = 0; i < user.person.length; i++){
user.push({
    name: person[i].name
});
}

这没效果。我还要补充一点,这都是通过ejs呈现的。

2 个答案:

答案 0 :(得分:1)

 user.person.push({"name":req.body.name}); 

答案 1 :(得分:0)

问题是,user.person是一个数组 - 因此您无法像name那样访问user.person.name - 如果您想添加新名称,那么您需要访问{{1}数组,然后推送新的person - 这是你打算做的吗?在这种情况下 - 这是你应该做的:

req.body.name

尝试一下,让我知道这是否有帮助。