2012-08-01 9 views
1

나는 익스프레스와 몽구스를 사용하여 사용자 입력에 대한 검증을 시도하고있다. 이전에는 User 모델의 'password'필드에 'min-length'유효성 검사기를 직접 설정했습니다. 입력 된 암호 문자열이 충분히 길 었는지 확인하고 그렇지 않은 경우 사용자를 저장하려고 할 때 생성 된 ValidationError 객체로 전달됩니다. 이것은 사용자에게 다시 보내지고 적절한 양식 필드에 표시됩니다.몽구스 오류 처리

하지만 해싱, 소금 및 암호화가 구현되었으므로 제대로 작동하지 않습니다. 해시 된 암호 버전은 원래 암호보다 훨씬 길다.

exports.createNewUser = function(req, res, next){ 

    var user = new User({ 
      email : req.body.email 
     , name : req.body.name 
    }) 
    , minLength = Validator.minLength(req.body.password); 

    if (!minLength) return next(new Error('Password aint right length')); 

    user.setPassword(req.body.password); 

    user.save(function(err){ 
     if (!err) return res.redirect('/'); 
     else { 
      console.log('error saving usr', err); 
      err['body'] = req.body; 
      return res.render('user/register', err); 
     } 
    }); 
}; 

문제는

return next(new Error('err message')); 

단순히 콘솔에 표시됩니다 있다는 것입니다 : 그래서 나는 같은 것을 할 수 있다고 생각. 몽구스 유효성 검사 오류 개체에 연결하는 방법이 필요합니다. 어떤 아이디어?

답변

1

조금 뒤돌아 보면 해결책을 찾았습니다. 기본적으로 모델을 저장하기 전에 모델에서 '유효성 검사'기능을 호출 할 수 있습니다. 그런 다음 모델에 반드시 설정되어 있지 않은 다른 속성에 추가 유효성 검사를 적용 할 수 있습니다. 이 경우 해시되지 않은 비밀번호 문자열의 길이를 테스트하여 길이가 충분한 지 확인합니다. 그렇지 않은 경우 반환 된 오류 개체에 개체를 추가합니다. 그런 다음 양식으로 다시 보낼 수 있습니다.

user.validate(function(err){ 
     if (req.body.password.length < 20) { 
      err.errors.password = { type : 'the pw should be longer'}; 
     } 
     console.log(err); 
    });