2017-12-18 6 views
1

Ich habe einen NodeJS-Server, der Daten von zwei verschiedenen APIs nimmt, und dann möchte ich das Ergebnis von beiden in einer JSON-Antwort kombinieren. Hier schicke ich Ihnen den Code:Antwortdaten in einer Antwort zusammenführen

EventModal.eventSearch(eventReq, type, async function (eventRes) { 
     EventModal.getBoostEvents(eventReq, type, async function (eventBoostRes) { 
          res.json({ 
           status: true, 
           data: eventRes, 
           eventBoostRes: eventBoostRes, 
          }); 
     }); 
    }); 

I eventRes und eventBoostRes in einer Antwort will in data .So wie kann ich das erreichen?

eventRes und eventBoostRes sind Abfrageergebnis.

Vielen Dank im Voraus.

+0

Können Sie erweitern, was 'eventRes' und' eventBoostRes' enthalten. –

+0

Mögliches Duplikat von [Wie kann ich Eigenschaften von zwei JavaScript-Objekten dynamisch zusammenführen?] (Https://stackoverflow.com/questions/171251/how-can-i-merge-properties-of-two-javascript-objects-dynamic) –

+0

In JS ist alles so einfach wie 'obj.key = val', wobei val eine js-zuweisbare Entity sein kann, wie eine Ganzzahl, ein Objekt oder eine Funktion. Es csn sein auch 'obj [key] = val' wo Schlüssel eine Variable –

Antwort

1

Frage ist nicht ganz klar.

Es klingt jedoch wie Sie erhalten 2 Arrays und Sie möchten ein einzelnes Array in der Antwort zurückgeben. Quick (und schmutzig) Weg, dies zu tun, ist array.concat(anotherArray) Funktion:

EventModal.eventSearch(eventReq, type, async function (eventRes) { 
    EventModal.getBoostEvents(eventReq, type, async function (eventBoostRes) { 
     res.json({ 
      status: true, 
      data: eventRes.concat(eventBoostRes) 
     }); 
    }); 
}); 

jedoch die 2-Abfragen verursachen wird synchron laufen und ist nicht optimal. Sie könnten optimieren diese Versprechen zu verwenden und 2 Abfragen parallel laufen:

Promise.all([ // this will run in parallel 
    EventModal.eventSearch(eventReq, type), 
    EventModal.getBoostEvents(eventReq, type) 
]).then(function onSuccess([ eventRes, eventBoostRes ]) { 
    res.json({ 
    status: true, 
    data: eventRes.concat(eventBoostRes) 
    }); 
}); 

Auf der anderen Seite; Dies sollte wahrscheinlich auf der Abfrageebene behandelt werden.

2

Sie können sie wie folgt zusammenfassen:

EventModal.eventSearch(eventReq, type, async function (eventRes) { 
    EventModal.getBoostEvents(eventReq, type, async function (eventBoostRes) { 
     res.json({ 
      status: true, 
      data: { 
       eventRes, 
       eventBoostRes 
      } 
     }); 
    }); 
}); 
+0

es enthält in einem anderen Array-Objekt. Also muss ich als Antwort Änderungen vornehmen. –

+1

Kannst du einfügen, wie 'eventRes' und' eventBoostRes' aussehen könnten? Und fügen Sie das Ergebnis ein, das 'Daten' in der Antwort enthalten soll? – maxpaj

Verwandte Themen