Angular JS
$scope.editCart = function(cart){
$http.put('/editCart/' + cart._id , cart).success(function(response){
...
});
};
1. Client Side인 Angular JS 쪽에서 $http.put 을 작성한다.
***
$http.put 에 들어갈 라우트는 보통 기본 route 뒤에 해당 item의 _id 값을 붙여준다
( '/editCart/' + cart._id )
** 추후에 저 _id 값은 Node.js 쪽에서 req.params 를 통해서 가져올 수 있다.
그 후에 cart를 전달한다.
** 추후에 이 cart는 req.body를 통해서 가져올 수 있다.('/editCart/' + cart._id , cart)
Node.JS(Express)
app.put('/editCart/:id',function(req,res){
var id = req.params.id;
var query = {_id:ObjectId(id)};
var sort = [];
var operator = {$set : {product:req.body.product , price : req.body.price } };
var options = { 'new' : true };
db.collection('cart').findAndModify(query,sort,operator,options,function(err,doc){
if(err) throw err;
res.json(doc);
});
});
2. Server Side인 Node.js 쪽에서 app.put('/editCart/:id' ... 를 설정해준다.
:id의 의미는 /editCart/ 의 뒤에 따라붙은 놈을 id라는 변수로 받는다는 의미이다.
저 변수는 req.params.id 에 저장되어 있다.
보통은 저 변수를 var id = req.params.id; 형태로 따로 저장해서 사용한다.
3.위에서 회색처리된 코드들은 MongoDB의 findAndModify와 관련되어 있는 코드들이다.
put의 처리와 관련된 MongoDB의 메소드는 findAndModify 이다.
findAndModify의 사용법은 다음과 같다.
db.collcetion('cart').findAndModify(query,sort,operator,options,callback);
(1) query
query 에는 말 그대로 query할 document를 집어넣는다.
{_id:ObjectId(id)}
(2) sort
추후에 설명(배열의 형태라는 것만 알고 있자.)
(3)operator
operator에 관해서 작성한다.
위의 예제에서는 $set operator을 사용했다.
{ $set : {product:req.body,product , price : req.body.price } };
$set operator?
db.people.update({name:"Alice"},{$set:{age:30}});
$set은 First arguments에서 찾아진 document를 토대로
$set에 설정된 field만 수정한다.
만약, 그 field가 없다면, 새로운 field를 만들어서 그 document에 추가한다.
(4) options
findAndModify의 option에 관해서 설정한다.
위의 예제에서는 'new' option을 설정했다.
{ 'new' : true };
$new option?
new option은 기본적으로 false로 설정되어있는데, true로 설정되면 original이 아닌 수정된 document를 return 한다.
(5) callback
function(err,doc){
if(err) throw err;
res.json(doc);
}