2017-11-14 19 views
1

처음으로 노드를 사용 중이며 특정 응답이 트리거 될 때 문제가 있습니다. 이 경우 username과 pw가 DynamoDB에있는 것과 일치하는지 확인하고 있습니다. 사용자 이름과 비밀번호가 내 데이터베이스와 일치하지 않을 때 내 페이지로 리디렉션되지만, 내 console.log 출력은 모두 "온라인"과 "블로그"와 같이 Chrome의 favicon과 관련이있는 것으로 보입니다. [pw] + database.js "하지만 IDE와 터미널이 정지합니다. 내 브라우저에서 "페이지가 작동하지 않고 localhost가 데이터를 보내지 않았습니다."라는 오류가 나타납니다. 무시 사생활의 문제 :) 생각?페이지가 작동하지 않습니다. 오류가 발생했습니다. 노드가 멈 춥니 다.

database.js :

var myDB_lookup = function(username, password, route_callbck){ 
     console.log('Looking up: ' + username); 
     users.get(username, function (err, data) { 
     if (err) { 
      route_callbck(null, "Lookup error: "+err); 
     } else if (data == null) { 
      route_callbck(null, null); 
     } else { 
      // JSON object that stores password & fullname 
      var value = JSON.parse(data[0].value); 
      var pw = value.password; 
      if (pw.valueOf() == password.valueOf()){ 
       route_callbck({ password : pw }, null); 
       console.log(pw + "database.js"); 
      }else{ 
       //console.log('wrong password'); 
       route_callbck(null, null); 
      } 
     } 
     }); 
}; 

routes.js :

var checkLogin = function(req,res){ 
    var user = req.body.username; 
    var pw = req.body.password; 
    console.log(user + pw + "routes"); 

    db.lookup(user, pw, function(data, err) { 
      if (data!=null){ 
       console.log("online"); 
       //req.session.username = user; 
       //req.session.password = pw; 
      }else{ 
       res.render('main.ejs',{error:"Fields incorrect"}); 
      } 
    }); 

}; 

main.ejs : 내가 할 때

<form method="post" action="/checklogin"> 
    Enter username here: <br> 
    <input type="text" name="username" placeholder = "Your username"> <br> 
    Enter password here: <br> 
    <input type="password" name="password" placeholder = "Your password"> 
    <input type="submit" value="Log In"> 
</form> 

기능은 모든 routes.js에 연결되어 module.exports = ...

답변

0

아마도 응답을 보낼 것을 잊지

res.render() 또는 res.json() 또는 res.send()은 당신이 주변에 JSON.parse()를 시도/캐치를 넣어해야

을 당한다 확인, 그게 가장 좋은 방법입니다. 당신의 범인이 여기처럼

가 보이는 :

또한
  if (data!=null){ 
       console.log("online"); 
       //req.session.username = user; 
       //req.session.password = pw; 

       // you need to send the response here too! <<<<< 
      res.render('main.ejs'); //// !!! 
      }else{ 
       res.render('main.ejs',{error:"Fields incorrect"}); 
      } 
+0

, 밑줄 변수 이름을 제거,'route_callbck'은 일반적으로, Node.js를에서의 99 %를 말하기 ... cb''해야 하나 이상의 콜백이 직접 범위에 있지 않습니다. 각각에 동일한 변수 이름을 사용한다면, 예를 들어'cb'는 제 의견으로는 가장 좋은 방법입니다. –

+0

또 다른 것은 에러 콜백을 사용해야한다. 그래서이'route_callbck ({password : pw}, null);은'cb (null, {password : pw})가되어야한다. ' –

+0

고마워, 알렉산더! 문제가 해결되었습니다. Cb 제안에 대해서는 전체 파일에서 일관성있게 함수 이름을 변경해야한다고 말하고 있습니까? – curious4cs