2016-09-03 2 views
0

샘플 JSON 데이터는 내 MongoDB를 배치하는 방법을 보여 : 위해 지금배열 항목의 NodeJS 백엔드 POST?

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

:

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

내 HTML에서 다음 POST 값 namestate에 입력 양식이 이 POST를 처리하기 위해 다음과 같이 배열 된 노드 루트 코드가 있습니다.

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을 입력하고 제출하면 상태 (내 DB에 표시된대로)가 사용자가 입력 한 값으로 변경됩니다. 이는 의도 한대로 작동합니다.

두 번째로 name을 입력하고 제출하면 배열에 새로운 name이 추가되어야합니다.

두 번째 작업이 작동하지 않습니다. 그래서 같이 푸시와 루프에 대한 코드를 교체 시도했다 :

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 배열입니다보십시오 - 다음 누르면 다음 person 배열에 액세스해야하는, 그래서 당신은 새 이름을 추가 할 - 경우 당신은 user.person.name 같은 name에 액세스 할 수 없습니다 새로운 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

관련 문제