2014-11-24 3 views
3

mongoose에서 mongodb의 업데이트 문서에 문제가 있습니다. 몽구스 - findByIdAndUpdate - req.body와 작동하지 않습니다.

내 모델 노호 :

var mongoose = require('mongoose'); 
var bcrypt = require('bcrypt-nodejs'); 

var UserSchema = new mongoose.Schema({ 
    first_name:{ 
     type: String 
    }, 
    last_name:{ 
     type: String 
    }, 
    email:{ 
     type: String, 
     unique: true, 
     required: true 
    }, 
    password:{ 
     type: String, 
     required: true 
    }, 
    is_active:{ 
     type: Boolean, 
     default: true 
    }, 
    last_login:{ 
     type: Date 
    } 
}); 
module.exports = mongoose.model('User', UserSchema); 

컨트롤러 노호 함수 입력 :

exports.updateUser = function (req, res) { 
    console.log(req.body); 
    User.findByIdAndUpdate(req.body.user_id, {$set:req.body}, function(err, result){ 
     if(err){ 
      console.log(err); 
     } 
     console.log("RESULT: " + result); 
    }); 
    res.send('Done') 
} 

출력 콘솔 :

Listening on port 3000... { first_name: 'Michal', last_name: 'Test' } 
PUT /api/users/54724d0fccf520000073b9e3 200 58.280 ms - 4 

인쇄 params를 (형태 데이터로서 제공되는 키 - 값). 적어도 나에게 무슨 문제가 있는지는 잘 모르겠다.

+0

이 {: '마이클', LAST_NAME : FIRST_NAME '테스트'} 당신의 req.body? – rahpuser

+0

예가 req.body입니다. – Robert

답변

10

당신은 또한 대신 req.body.user_id

exports.updateUser = function (req, res) { 
    console.log(req.body); 

    User.findByIdAndUpdate(req.params.user_id,{$set:req.body}, function(err, result){ 
     if(err){ 
      console.log(err); 
     } 
     console.log("RESULT: " + result); 
     res.send('Done') 
    }); 
}; 
1

실수를 발견했습니다. 내가

을 req.body.user_id 전화 드렸습니다 곳

가 req.params.user_id해야합니다

  • URL이 (PUT) http://127.0.0.1:3000/api/users/54724d0fccf520000073b9e3
  • 입니다
,363,210
0

req.params.user_id를 사용할 필요는 req.body 텍스트로 키 값을 가질 것이며, 코드 내부 String 대상으로 깨달았다. 따라서 을 사용하여 문자열을 JSON으로 파싱하는 것이 유용합니다. user이 키이고 { first_name: 'Michal', last_name: 'Test' }이 값입니다.

console.log(req.body); 
var update = JSON.parse(req.body.user); 
var id = req.params.user_id; 
User.findByIdAndUpdate(id, update, function(err, result){ 
    if(err){ 
     console.log(err); 
    } 
    console.log("RESULT: " + result); 
    res.send('Done') 
}); 

참고 : 값으로 몽고 DB로 전송되는 갱신

{$set: { first_name : 'Michal`, last_name: 'Test' } 

또한 참조 : Mongoose JS documentation - findByIdAndUpdate

관련 문제