2017-03-23 6 views
0

Ich arbeite derzeit an einer Route die ein Array zurückgibt, die die Ergebnisse von zwei separaten Aufrufen der Datenbank enthält. Individuell funktionieren die Funktionen, die ich in den Modellfunktionen anrufe, wie vorgesehen. Wenn ich jedoch versuche, sie zu kombinieren, indem ich die zweite Funktion innerhalb des Rückrufs des ersten aufruft, erhalte ich einen Fehler, dass die zweite Funktion "keine Funktion ist". Hier ist der Code in meiner Routenliste. Hinweis util und errorhandler sind Dateien, die ich erstellt habe, um mit dem Rückkehrformat zu helfen, und sollte diesen Fehler nicht bewirken. Jede Hilfe, die das löst, wäre dankbar, Danke!Node.js Funktion verschachtelt in Callback-Rückgabe nicht definiert Fehler

Route/Liste

router.route("/list/:id").get(function(req, res) { 
list.getListMovie(req.params.id, function(err, list) { 
if (err) { 
    res.json(errorHandler.handleDatabaseErrors(err)); 
    return; 
} 
var response = []; 
response["movies"] = list; 
console.log(response) 
list.getListTV(req.params.id, function(err, list1) { 
    if (err) { 
    res.json(errorHandler.handleDatabaseErrors(err)); 
    return; 
    } 
    response["tv"] = JSON.parse(list1); 
    console.log(response) 
    res.json(utils.returnFormatForDB(response)); 
    }); 
    }); 
}); 

die Funktionsdefinitionen innerhalb von Modellen/Liste

exports.getListTV = function(userid, done) { 
db.get().query('SELECT `idmedia`, `rating`, `title`, `poster_path` FROM 
`list` JOIN `tv` ON list.idmedia = tv.tv_id WHERE list.idusers = ?', userid, 
function(err, rows) { 
    if (err) return done(err); 
    done(null, rows); 
}); 
} 

exports.getListMovie = function(userid, done) { 
db.get().query('SELECT `idmedia`, `rating`, `title`, `poster_path` FROM 
`list` JOIN `movies` ON list.idmedia = movies.movie_id WHERE list.idusers = 
?', userid, function(err, rows) { 
    if (err) return done(err); 
    done(null, rows); 
}); 
} 

EDIT :: Ich bin der richtige Weg, nicht sicher, ob eine Frage zu markieren als beantwortet, sondern durch die Festsetzung Überschreiben der Liste und Beantworten eines Objekts Ich konnte meinen Code zum Funktionieren bringen. Danke für die Hilfe!

+2

Sie überschreiben 'list' im Funktionsaufruf' getListMovie'. Ändere das '(err, list)' in etwas wie '(err, movieList)'. – forrestmid

+0

danke für das zeigen, aber das ändert nicht die Funktion nicht gefunden Fehler –

Antwort

0

Sie überschreiben die Variable list. Versuchen

list.getListMovie(req.params.id, function(err, movieList) { 
    if (err) { 
    res.json(errorHandler.handleDatabaseErrors(err)); 
    return; 
    } 
    var response = {}; 
    response["movies"] = movieList; 
    console.log(response) 
    list.getListTV(req.params.id, function(err, tvList) { 
    if (err) { 
     res.json(errorHandler.handleDatabaseErrors(err)); 
     return; 
    } 
    response["tv"] = JSON.parse(tvList); 
    console.log(response) 
    res.json(utils.returnFormatForDB(response)); 
    }); 
}); 

Auch ich bin mir ziemlich sicher, dass Sie die response Variable ein Objekt zu sein, nicht ein Array.

+1

Vielen Dank! es zu einem Objekt zu machen, schien den Trick zu machen und das Überschreiben des Arrays zu beheben –

Verwandte Themen