2017-02-23 1 views
0

안녕하세요, 제 코드를 살펴볼 수 있습니까? 나는 자바 스크립트에 대한 나의 이해를 높이기 위해 사이드 프로젝트로 구축하고있는 백 엔드에서 인증을 구현 중이다.처리가 어렵습니다. 자바 스크립트로 약속하기

몽구스 검색의 약속이 정의되지 않은 이유는 확실하지 않습니다.

두 가지 기능이 있습니다. 하나는 제어기로 전달되는 도움말 기능입니다.

import db from '../models'; 
import bcrypt from 'bcrypt'; 
import validateLogin from '../validations/login'; 
import isEmpty from 'lodash/isEmpty'; 
const loginController = {}; 

loginController.login = function(req,res){ 
    validateLogin(req.body).then(({isValid, errors }) => { 
    // isValid is undefined here 
    // This is the problem 
     if(isValid){ 
      // give token 
      res.status(200).json({ 
       success: true, 
      token: 'here is your token' 
      }); 
     } else { 
      res.status(401).json({ 
      errors 
      });  
     }  
    }).catch(err =>{ 
     console.log(err) 
    });  
}; 

export default loginController; 

다른 헬퍼 기능이 유효한지 응답을 리턴하는지에 따라 토큰을 issuse 것이다 제어기 기능 자체이다. returnbcrypt 전화 누락처럼

import validator from 'validator'; 
    import db from '../models'; 
    import isEmpty from 'lodash/isEmpty'; 
    import bcrypt from 'bcrypt'; 

    function validateLogin(data){ 
     const { userInput, password } = data; 
     const errors = {}; 
     if(validator.isEmpty(userInput)){ 
     errors.userInput = 'username is required'; 
     } 
     if(validator.isEmpty(password)){ 
     errors.password = 'password is required'; 
     } 
     return db.User.find({$or:[{ username: userInput }, { email: userInput }]}).then(existingUser =>{ 
     if(existingUser.length > 0){ 
      // User exists, check if password matches hash 
      const user = existingUser[0]; 
      bcrypt.compare(password, user.password_digest).then(valid => { 
       if(!valid){ 
        errors.password = 'Invalid Password'; 
       } 
       console.log('from prmomise'); 
       return { 
        isValid: isEmpty(errors), 
        errors 
       }; 
      }).catch(err => console.log(err)); 
      } else { 
      errors.userInput = 'username or email does not exist'; 
      return { 
       isValid: isEmpty(errors), 
       errors 
      }; 
      } 
     }); 
    } 

    export default validateLogin 
+1

* 취급의 어려움 실제 생활에서도 약속드립니다 :-p – Rajesh

+1

왜 downvotes입니까? – Nate

+0

약속은 @Rajesh^_^ – Deep

답변

1

그것은 같습니다없이

return bcrypt.compare(password, user.password_digest).then(valid => { 
    // password check and returning result object 
}).catch(err => console.log(err)); 

validateLogin 기능은 결국 undefined로 확인되는 약속을 반환합니다.

+0

'finally returns undefined'입니다. - 아니요, validateLogin'은 약속을 반환합니다 ...이 약속은'db.User.find' 다음에'.then'가 끝날 때'undefined'로 해결할 것입니다. : p –

+0

Thx, 네 말이 맞아, 내가 그랬던거야. 나는 그것을 고쳤다. – lex82

+0

멋진! 전공이 나 한테 미끄러 져. 나는 이것을 고치려고 2 시간을 단단히 고정시켰다. – Nate

관련 문제