Ich versuche, jedem Element eines Arrays einige zusätzliche Werte hinzuzufügen. Also habe ich ein Array mit Objekten und sie haben: x, y und z Felder. Ich möchte dann zu jedem Objekt im Array zusätzliche Elemente basierend auf der Antwort eines http.get-Aufrufs hinzufügen.ForEach aktualisiert Hauptarray nicht
Haupt Array ist: Beiträge
Siehe Code unten:
router.get('/api/posts', function(req, res){
postModel.find({})
.limit(10)
.exec(function(err, posts) {
var options = {
host: 'localhost',
port: 3000,
path: '/user?id=12345678',
method: 'GET'
};
if(posts){
posts.forEach(function(post) {
var req = http.get(options, function(res) {
var bodyChunks = [];
res.on('data', function(chunk) {
bodyChunks.push(chunk);
}).on('end', function() {
var body = Buffer.concat(bodyChunks);
var parsedBody = JSON.parse(body);
post.fullname = parsedBody.user.fullname;
post.profilePic = parsedBody.user.profilePic;
});
});
});
res.json({
posts : posts
});
} else {
res.send('Post does not exist');
}
});
});
Zum Zeitpunkt des post.profilePic = parsedBody.user.profilePic - die profilePic Variable ist aber wenn ich eine Antwort vom Knoten über res.json bekomme, sind die zusätzlichen Werte nicht.
Was fehlt mir hier? Ich benutze diesen Ansatz mit meinem Angular Frontend die ganze Zeit ohne ein Problem.
Dank
Versuchen Sie eins: weisen Sie einer Variable 'var temp = post'' post' zu. Fügen Sie 'fullname' und' profilePic' zu dieser Variablen 'temp.fullname = parsedBody.user.fullname;' und 'post.profilePic = parsedBody.user.profilePic' hinzu. Gib nun 'temp' anstelle von' posts' zurück. –
Danke für den Kommentar. Dieser Ansatz wird funktionieren, aber sicherlich gibt es einen nativeren Weg richtig? Ich werde zu dem Array pushen müssen, wo die meisten Daten bereits da sind, was zu einem enormen Overhead im Speicher führen wird (die realen Daten sind riesig). –