2017-10-12 5 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 }); 
}); 

Répondre

0

Je ne sais pas ce que fait test.find mais je suppose qu'il s'agit d'une sorte de requête DB asynchrone. Je ne sais pas à quoi le troisième argument (le rappel) serait utilisé, mais je ne pense pas que ce soit nécessaire pour ce que vous essayez de faire.

Je suggère d'utiliser le nom next pour le rappel Express car cette convention est quasiment universelle, vous ne troublerez les autres personnes que si vous commencez à l'appeler cb.

Le principal problème avec votre code semble être un malentendu sur la façon dont les rappels fonctionnent avec du code asynchrone. C'est beaucoup plus simple que vous essayez de le faire, vous avez juste besoin d'attendre que le processus asynchrone se termine avant d'essayer de rendre votre page. Vous faites cela en mettant le code approprié dans la fonction de rappel, c'est-à-dire le function que vous passez à find.

J'ai dû faire quelques hypothèses sur ce que vous essayez de faire, mais je pense que ce serait quelque chose comme ceci:

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

Merci pour la réponse! Je vais essayer dans quelques heures quand je rentre à la maison. Votre hypothèse est correcte à propos de text.find. Je pensais que cb signifiait callback pas le suivant, je pensais qu'ils étaient deux fonctions différentes. Cependant, je vais l'appeler à partir de maintenant. Oui, je ne comprends pas comment fonctionnent les callbacks. Si vous avez des suggestions sur des ressources d'apprentissage, j'aimerais les entendre aussi. Merci encore. – rastan77

+0

Votre code original avait deux choses appelées 'cb', donc pour être clair, c'est celui dans' function (req, res, cb) 'qui devrait s'appeler' next', c'est-à-dire 'function (req, res, next)'. Vous avez également créé deux fonctions anonymes qui pourraient être appelées «callbacks», ce qui rend difficile l'utilisation du terme sans ambiguïté. – skirtle

+0

Ca marche !!! Je vous remercie! Je ne peux pas croire à quel point le correctif était simple. – rastan77