MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Sortieren Sie Schlüssel im Antwortobjekt von Mongoose in ExpressJS und NodeJS

Express' res.send -Methode erkennt diesen artist ist ein Objekt und ruft JSON.stringify auf darauf, um das Objekt vor dem Senden in eine JSON-Zeichenfolge zu konvertieren. Etwas vereinfacht, die JSON.stringify -Methode durchläuft Ihren artist Objektschlüssel in der Reihenfolge, in der sie erstellt wurden. (Hier ist ein Link zur komplizierteren Bestellerklärung. ) Das erklärt das aktuelle Verhalten.

Andere können sich mit ihren eigenen Vorschlägen dazu äußern, wie Sie das erreichen könnten, was Sie anstreben, aber hier ist ein einfacher, den Sie zuerst ausprobieren sollten:

  • Machen Sie zuerst Ihre eigenen JSON.stringify , mit einem "Replacer", um die gewünschte Ausgabereihenfolge zu erstellen :

    const artistString = JSON.stringify(artist, ["realName", "stageName", ...])
    // '{"realName": "Paul David Hewson", "stageName": "Bono", ...}'
    
  • Verwenden Sie dann res.json(artistString) , statt res.send , um Ihren JSON-String mit dem richtigen Content-Type zu senden Header. (res.send nimmt an, dass Sie Content-Type: “text/html” möchten .)

Es gibt definitiv kompliziertere Ansätze, darunter das Erstellen einer Funktion, die Schlüssel abruft, sie sortiert und einen Ersetzer zurückgibt; oder eigene .toJSON() schreiben Ersatz für JSON.stringify . Möglicherweise müssen Sie einen dieser Ansätze implementieren, da Sie verschachtelte Objekte haben. das Verhalten des Ersetzers kann etwas sein wackelig in diesem Fall . Möglicherweise können Sie die verschachtelten Eigenschaften direkt nach dem übergeordneten Element auflisten, z. B.:

["realName", "type", ...]

Da Sie jedoch für einige verschachtelte Eigenschaften dieselben Namen haben, kann dies für Sie funktionieren oder nicht. Möglicherweise müssen Sie die Innenseiten besaiten, bevor Sie die Außenseiten besaiten (gah!).

Auf jeden Fall kann mein Vorschlag hoffentlich ein erster Schritt sein.