Rückruf ist nicht eine Funktion in Mungo.find({})

Ich bin neu Node.js und Mungo, ich bin versucht zu query-Objekten aus einer mongo-Kollektion Verwendung finden ({}), und die Funktion ist wie folgt :

schema.statics.listAllQuizes = function listAllQuizes(){
Model.find({},function(err,quizes,cb){
    if(err){
        return cb(err);
    }else if(!quizes){
        return cb();
    }
    else {
        return cb(err,quizes);
    }
});};

Aber wenn ich diese Funktion aufrufen, bekomme ich eine Fehlermeldung

        return cb(err,quizes);
               ^
        TypeError: cb is not a function

Ich stecke an diesem Punkt, kann jemand bitte mir dabei helfen, vielen Dank im Voraus.

  • Möglich, Duplikat der Wie gebe ich die Antwort eines asynchronen Aufruf?. Das bedeutet, dass Sie nicht return Funktion Ergebnisse, die Sie „benutzen“ Sie Sie, indem Sie einen Rückruf zu handeln, über den Wert.
  • ich bin die Behandlung in cb (); ich bin nicht einfach zurückgeben quizes oder Fehler
InformationsquelleAutor kumarD | 2016-02-06



2 Replies
  1. 5

    Den Rückruf sollte ein argument für listAllQuizes ist, und nicht ein argument für die anonyme handler-Funktion.

    In anderen Worten:

    schema.statics.listAllQuizes = function listAllQuizes(cb) {
      Model.find({}, function(err, quizes) {
        if (err) {
          return cb(err);
        } else if (! quizes) {
          return cb();
        } else {
          return cb(err, quizes);
        }
      });
    };

    Welche, logisch, ist fast das gleiche wie dies:

    schema.statics.listAllQuizes = function listAllQuizes(cb) {
      Model.find({}, cb);
    };

    Hier ist ein Beispiel, wie man es benutzt:

    var quiz = App.model('quiz');
    
    function home(req, res) { 
      quiz.listAllQuizes(function(err, quizes) {
        if (err) return res.sendStatus(500);
        for (var i = 0; i < quizes.length; i++) {
          console.log(quizes[i].quizName)
        }
        res.render('quiz', { quizList : quizes });
      });
    } 
    • können Sie uns zeigen, wie Sie mit listAllQuizes?
    • var quiz = App.Modell(‚quiz‘); function home(req,res){ quizes = quiz.listAllQuizes(); for(var i=0;i<Wettbewerbe.length;i++) console.log(quizes[i].quizName) res.render(‚quiz‘,{quizList:Wettbewerbe}); }
    • Ich fügte hinzu, ein update zu meiner Antwort, um zu zeigen, wie es zu benutzen.
    • sir,, der code oben ist, wie ich es benutze , ohne übergabe einer callback-Funktion, die listAllQuizes(); jetzt habe ich es geändert, um eine callback-Funktion als parameter, und es funktioniert, vielen Dank 🙂
    • Sie sind genial, vielen Dank für das Beispiel, sir 🙂
  2. 2

    Vorausgesetzt, Sie haben den code irgendwo, der wie folgt aussieht:

    foo.listAllQuizzes(function (err, quizzes) {
      ...
    });

    Dann Ihre Funktion listAllQuizzes übergeben wird eine callback:

    schema.statics.listAllQuizzes = function (cb) {
      Model.find({}, function(err, quizzes) {
        if (err) return cb(err);
        cb(null, quizzes);
      });
    };
    • Sicher, aber ich glaube robertklep die Antwort ist wohl eher die komplette Lösung, die Sie suchen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.