2017-09-12 4 views
2

수신되는 오류 메시지는 다음과 같습니다Node.js를/몽구스가/lodash - 서버 응답 :. 사용자 확인이 실패 : 경로`foo`이 필요

"사용자 유효성 검사 실패 : 이메일 : 경로 email이 필요합니다, display_name : 경로 display_name이 필요합니다. "

보내질 오류 이름은 다음과 같습니다. ValidationError.

AJAX 호출을위한 코드는 다음과 같습니다

function submit_new_user(display_name, email, password){ 
let user_data = new New_User(display_name, email, password); 
console.log(user_data); 
$.ajax ({ 
    dataType: 'JSON', 
    data: user_data, 
    method:'POST', 
    url: 'http://localhost:3001/user', 
    success: (res)=>{ 
     console.log(res); 
    }, 
    error: (xhr, ajaxOptions, thrownError)=>{ 
     console.log(xhr, ajaxOptions, thrownError); 
    } 
}); 

}; 인쇄 위에서 본

을 console.log :

New_User {display_name: "test", email: "[email protected]", password: "Passw0rd"} 

서버 경로가이 : 우편 배달부로 ping을 할 때

app.post('/user', (req, res)=>{ 
    let body = _.pick(req.body, ['display_name', 'email', 'password']); 
    let user = new User(body); 
    user.save().then(()=>{ 
     return user.generateAuthToken(); 
    }).then((token)=>{ 
     res.header('x-auth', token).send(user); 
    }).catch((err)=>{ 
     res.status(400).send(err); 
    }); 
}); 

이 경로는 작동합니다. 서버는 cors를 지원합니다.

모델은 다음과 같다 :

var UserSchema = new mongoose.Schema({ 
    display_name: { 
     type: String, 
     unique: true, 
     required: true, 
     validate: { 
      validator: (val)=>{ 
       return /^[\w\s]+$/.test(val); 
      }, 
      message: '{VALUE} is not a valid display name. Only 
    alphanumeric, upper and lower case characters are allowed.' 
     } 
    }, 
    email: { 
     type: String, 
     required: true, 
     unique: true, 
     validate: { 
      validator: validator.isEmail, 
      message: '{VALUE} is not a valid email.'    
     } 
    }, 
    password: { 
     type: String, 
     require: true, 
     minlength: 6 
    }, 
    tokens: [{ 
     access:{ 
      type: String, 
      required: true 
     }, 
     token: { 
      type: String, 
      required: true 
     } 
    }] 
}); 

난 아직 배우는 중이에요 node.js.을 필자는 API 생성 과정을 안내 받았고 자체적으로 프론트 엔드를 구축하려고합니다.

떠나는 개체는 세 개의 값 쌍을 포함하지만 서버가 변경하기 전에 도착하는 개체는 비어 있습니다. 나는 왜 그런지 상실감을 느낀다.

답변

3

해결 방법 : 서버 측 bodyParser에 문제가 있습니다. 인코딩 된 URL 메서드를 포함하는 것을 잊었습니다. 이전에는 API 만 Postman을 사용하여 테스트했기 때문에 JSON을 파싱하지 않았으므로 .urlencoded() 메소드를 사용할 필요가 없었습니다.