2017-10-12 10 views
0
app.get('/indexInstHome.html', 
    require('connect-ensure-login').ensureLoggedIn('indexErrorAccount.html'), 
    function(req, res, cb) 
     { 
     test.find({selector:{"Class.email": req.user._id }}, function(er, 
     result, cb) { 
        if (er) { 
         console.log(er); 
        } 
        hello = result.docs; 
        return cb(hello); 
      }); 
    hello = cb(); 
    console.log(hello); 
    res.render('indexInstHome.html', { user: req.user, Classes: hello }); 
}); 

답변

0

나는 test.find이 무엇인지 모르겠다. 그러나 일종의 비동기 DB 쿼리라고 가정하고있다. 나는 세 번째 논의 (콜백)가 사용될 것이라는 것을 모르지만, 당신이하려는 것을 위해 필요하다고 생각하지 않는다.

익스프레스 콜백에 대해서는 next이라는 이름을 사용하는 것이 좋습니다. 그 규칙은 거의 보편적 인 것이므로 cb으로 시작하면 다른 사람들을 혼동하게됩니다.

코드의 주요 문제점은 콜백이 비동기 코드와 함께 작동하는 방식에 대한 오해입니다. 그것은 당신이 페이지를 렌더링하려고 시도하기 전에 비동기 프로세스가 끝날 때까지 기다릴 필요가 있습니다. 콜백 함수 내에 관련 코드를 넣으면 (function) find으로 전달됩니다.

난 당신이 뭘 하려는지에 대한 몇 가지 가정을 했어하지만 난 그것을 이런 식으로 뭔가있을 거라고 생각 : 대답에 대한

app.get('/indexInstHome.html', 
    require('connect-ensure-login').ensureLoggedIn('indexErrorAccount.html'), 
    function(req, res, next) { 
     test.find({selector: {"Class.email": req.user._id}}, function(err, result) { 
      if (err) { 
       console.log(err); 
       next(err); 
      } 
      else { 
       // Assuming result cannot be null 
       var hello = result.docs; 

       console.log(hello); 
       res.render('indexInstHome.html', { user: req.user, Classes: hello }); 
      } 
     }); 
    } 
); 
+0

감사합니다! 내가 집에 갈 때 나는 두 시간 만에 그것을 시험 할 것이다. text.find에 대한 귀하의 가정은 정확합니다. 나는 cb가 다음에 콜백을 의미하지 않는다고 생각했다. 그러나, 나는 여기에서 다음에 그것을 부를 것이다. 네, 콜백이 어떻게 작동하는지 이해하지 못합니다. 학습 자료에 대한 제안이 있으시면 나도 듣고 싶습니다. 다시 한번 감사드립니다. – rastan77

+0

원래 코드에는'cb'라는 두 가지 것이 있었으므로'function (req, res, cb)'에'next '라고 써야합니다. 즉 function (req, res, next)입니다. 또한 잠재적으로 '콜백'으로 설명 될 수있는 두 개의 익명 함수를 만들었으므로 모호함없이 용어를 사용하기가 어렵습니다. – skirtle

+0

그것은 작동합니다! 고맙습니다! 나는 그 수정이 얼마나 간단한 지 믿을 수 없다. – rastan77