2016-08-05 40 views
-1

Ich habe versucht, meinen Kopf um die Weitergabe von Daten mit Middleware mit den Request-und Response-Objekte in Express.js, und aus irgendeinem Grund die Daten stecken in einer Callback-Funktion in der Middleware selbst stecken .Problem mit der Weitergabe von Daten aus Middleware

First off, hier ist die individuelle Middleware:

// Get list of admins 
export var listAdmins = function(req, res, next) { 
    var admin = []; 

    client.admins.list((res) => { 
    var body = res.body.admins; 
    // var admin = []; 

    body.forEach(function (body) { 
     if (body.type === 'admin') { 
     admin.push(body); 
     } 
    }); 
    req.admins = admin; 
    console.log(req.admins); 
    console.log('Finished fetching admin data'); 
    next(); 
    }); 
} 

Die gibt console.log innerhalb der Callback-Funktion, die genauen Daten I, übergeben wollen kommentiert und das Objekt geht gut. Leider, wenn ich versuche, das außerhalb des Callbacks zu greifen, erscheint es immer als undefiniert. Ich habe das Admin-Array-Objekt außerhalb des Callbacks verschoben, da es sich um ein Scope-Problem handelte, aber es hat nichts gelöst.

Da dies eine Funktion ist, die eine Funktion von einer API aufruft, nehme ich an, dass dies zu meinem Problem beiträgt. Ich möchte viele dieser Funktionen wiederverwenden, aber wenn dies der Grund für das Problem der Weitergabe von Daten ist, bin ich voll und ganz auf Vorschläge angewiesen. Alles, um diesen Rahmen zu nutzen, wird sehr geschätzt. :)

Vielen Dank im Voraus!

BEARBEITEN: Ja, den Code in den verschachtelten Funktionsblock verschieben, damit er richtig eingestellt werden kann.

Antwort

1

client.admins.list() ist asynchron und kehrt sofort zurück, bevor req.admins gesetzt wird. Verschieben Sie Ihre letzten drei Zeilen Code innerhalb (am Ende von) der Rückruf an client.admins.list() übergeben.

+0

Ja, ich dachte, das wäre offensichtlich, aber ich denke, was Sie sagen wollen, ist, dass alles, was erwartet wird, innerhalb dieser Funktion sein muss? Da es hilft, lassen die req.admins immer noch nicht das bisschen Middleware. Sobald die Middleware abgeschlossen ist, ist die Eigenschaft in der Anforderung nicht mehr vorhanden, selbst wenn sie die nächste Funktion in die nächste Middleware übergibt. – DBrown

+0

Wenn Sie nach der Implementierung der von mir vorgeschlagenen Lösung immer noch Probleme haben, müssen Sie in Ihrer Frage relevanteren Code veröffentlichen, der das Problem veranschaulicht. – mscdex

+0

Nach dem Zurücksetzen der Ausführung eines Debugs, um zu sehen, ob es eingestellt wurde, wurde es außerhalb der Middleware angezeigt, also vermute ich, dass es eine Änderung war, die babel-watch zuerst nicht anwendete. Danke für die Hilfe. – DBrown