2017-04-06 1 views
0

업데이트 : 며칠 전에 이것을 게시하고 답변을 얻을 수 없었습니다. 아무도 도울 수 있습니까? 왜이 오류가 발생하는지 알 수 없습니다. 'null의'username '속성을 설정할 수 없습니다. 현재 사용자 ID를 캡처하기 위해 실행중인 코드가 작동하지 않는 것 같지만 여기서 어디서 잘못 될지 알 수 없습니다.업데이트 사용자 모델 경로가 작동하지 않는 이유는 무엇입니까 (mongodb)?

mongodb 사용자 모델의 업데이트 경로가 작동하지 않는 이유는 무엇인지 알 수 없습니다.

그래서 사용자는 현재 사용자 세부 정보가 미리로드 된 양식이 표시되고 양식을 편집 할 수 있으며 사용자 스키마가 업데이트되어야한다는 생각이 분명합니다.

router.get("/profile", function(req, res){ 
res.render("profile") 
}) 

사용자 스키마는 다음과 같습니다 :

<div class="row"> 
<div id="user-image-preview" class="col-md-4 col-sm-12 user-image-preview"> </div> 
<div class ="reg-container-form col-md-8 col-sm-12"> 
<div class="jumbotron form"><h2><i class="fa fa-user-plus" aria-hidden="true"></i> Update profile</h2></div> 
<form id="register" action = "/register" method="POST"> 
<div class="form-group has-feedback"> 
    <i class="fa fa-user" aria-hidden="true"></i> 
    <label for="username">Username</label> 
     <input id="username" type = "text" class = "form-control" value = "<%=currentUser.username%>" name="username"> 
</div> 

<div class="form-group has-feedback"> 
    <i class="fa fa-envelope" aria-hidden="true"></i> 
    <label for="email">Email</label> 
     <input id="email" type = "email" class = "form-control" value = "<%=currentUser.email%>" name="email"> 
</div> 

<div class="form-group"> 
    <div><i class="fa fa-picture-o" aria-hidden="true"></i> <label for="img">Image</label></div> 
     <input id="user-image-set" type = "text" class ="form-control" placeholder = "Enter image URL" name = "image"> 
      <a href="#"><div id="eye-button"><i id="preview-icon" class="fa fa-eye" aria-hidden="true"></i></div></a> 
</div> 

    <button id="submit-login" type ="submit" class="btn btn-primary btn-lg disabled">Confirm changes</button> 
</form> 
</div> 
</div> 

양식은 다음과 같은 경로를 통해 액세스 할 수 있습니다 :

가 여기 내 프로필 편집 양식의

var UserSchema = new mongoose.Schema({ 
username: String, 
password: String, 
image: String, 
email: String 
}); 

그래서 기본적으로, 나는 사용자가 원하는 입력란에 매개 변수를 다시 입력하고 확인을 클릭 한 다음 스키마가있는/blogs로 리디렉션됩니다. 업데이트되었습니다.

나는 길을 쓰려고했지만 솔직히 말해서 첫 줄에서 길을 잃었다. 동적으로 생성 된 요소에 대한 업데이트 경로를 이미 만들었지 만 (주석, 블로그)이 URL의 id 등을 통과하는 것과는 다른 것으로 보입니다. 나는 다음과 같이 findUserById 방법을 사용하여 시도했다

확실하지 곳 ... 여기에서 시작 :

router.post("/update-user", function(req, res, next){ 
User.findByIdAndUpdate(req.body.user_id, req.body.user, function (err,updatedUser){ 
    if(err){ 
     res.redirect("/profile") 
     console.log(err); 
    } else { 
     res.redirect("/blogs"); 
    } 
}) 
}) 

이 코드는 (리디렉션에서와 같이 블로그 /에) 잘 실행하지만 모델 updae하지 않습니다 . 그래서 updatedUser.save()를 삽입 시도했다 :

router.post("/update-user", function(req, res, next){ 
User.findByIdAndUpdate(req.body.user_id, req.body.user, function(err,updatedUser){ 
    if(err){ 
     res.redirect("/profile") 
     console.log(err); 
    } else { 
     updatedUser.save(); 
     res.redirect("/blogs"); 
    } 
}) 
}) 

이 다음과 같은 오류 발생 : 다음 다음과 같이 현재 사용자 ID 찾기 위해 코드를 변경 시도

TypeError: Cannot read property 'save' of null 

는 (다음의 조언 아래 접수를) :

router.post('/update-user',function (req,res,next){ 
User.findOne({_id: req.body._id},function (err,user){ 
if(err){ 
res.redirect("/profile") 
} else { 
user.username = req.body.username; 
user.email = req.body.email; 
user.image = req.body.image; 
user.save() 
}} 
)}); 

이 다음과 같은 오류 발생 :

TypeError: Cannot set property 'username' of null 

여기에 무슨 일이 벌어지는 지 잘 모르겠다!

답변

0

먼저 ID로 사용자를 찾은 다음 새 값을 전달하면됩니다.

업데이트 :

router.post('/update-user',function (req,res,next){ 

User.findOne({_id: req.body._id},function (err,user){ 
if(err){ 
    res.redirect("/profile") 
} else { 
user.username = req.body.username; 
user.email = req.body.email; 
user.image = req.body.image; 
user.save() 
}} 
)}); 

난 그냥 간단한 용어에 넣어, 당신이 하나에 회신 등

행운

+0

건배를 처리 오류 돌볼 수 확신 ! 양식 작업은 어떻습니까? 내 HTML 형식으로 보입니까? – DaveB1

+0

네, 당신의 행동이 당신의 router.post와 일치하는지 확인하십시오.어떻게 서버를 구성했는지 모르겠지만 양식에 urlencoded enctype을 사용해야 할 수도 있습니다. –

+0

안녕하세요, 다시 findByIdAndUpdate 메서드를 사용하여 업데이트 경로를 구현하려했으나 (위의 편집 참조) 오류가 발생했습니다. 솔직히 말해서, 나는 업데이트 경로의 논리에 대해 여전히 약간 개략적이다. 덧글 및 기타 동적으로 생성 된 내용을 업데이트하는 것으로 얻지 만, 사용자를 업데이트 할 때 어떤 이유로 공백을 그리는 것입니다. – DaveB1

관련 문제