2016-09-03 53 views
0

樣品JSON數據,向你展示我的MongoDB是怎麼安排的:NodeJS後端POST數組項?

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

我有以下崗位價值namestate在我的HTML輸入表單:

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

現在,爲了處理這個帖子,我已經安排像這樣我的節點路徑代碼:

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呈現的。

回答

1

嘗試

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

的事情是,user.person是一個數組 - 所以 - 如果你想添加一個新的名字,你可以不喜歡user.person.name訪問name,那麼你需要訪問person數組,然後推新的req.body.name - 這是你打算做什麼?在這種情況下 - 這是你應該做的:

//the rest of your code... 
if (err) return next(err); 
    /*first action*/ 
    user.state = req.body.state; 
    /*second action*/ 
    //Here you PUSH the new name into this array 
    user.person.push({'name':req.body.name}); 

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

試試看,讓我知道這是否有幫助。

+1

對不起,我更新了答案' – ishmaelMakitla