Express' res.send
il metodo riconosce quell'artist
è un oggetto e chiama JSON.stringify
su di esso per convertire l'oggetto in una stringa JSON prima dell'invio. Semplificando un po', il JSON.stringify
il metodo scorre il tuo artist
chiavi oggetto nell'ordine in cui sono state create. (Ecco un link alla spiegazione più complicata dell'ordine.
) Questo spiega il comportamento attuale.
Altri potrebbero intervenire con le proprie proposte su come potresti fare ciò a cui miri, ma eccone una semplice da provare prima:
-
Per prima cosa, fai il tuo proprio
JSON.stringify
, utilizzando un "sostituitore" per creare l'ordine di output desiderato :const artistString = JSON.stringify(artist, ["realName", "stageName", ...]) // '{"realName": "Paul David Hewson", "stageName": "Bono", ...}'
-
Quindi, usa
res.json(artistString)
, anzichéres.send
, per inviare la stringa JSON con ilContent-Type
corretto intestazione. (res.send
presumerà che tu vogliaContent-Type: “text/html”
.)
Ci sono sicuramente approcci più complicati, inclusa la creazione di una funzione che ottiene le chiavi, le ordina e restituisce un sostituto; o scrivendo il tuo .toJSON()
sostituisci JSON.stringify
. Potrebbe essere necessario implementare uno di questi approcci, poiché sono presenti oggetti nidificati; il comportamento del sostituto può essere un po' strano in questo caso
. Potresti essere in grado di elencare le proprietà nidificate subito dopo il genitore, come:
["realName", "type", ...]
ma poiché hai gli stessi nomi per alcune proprietà nidificate, questo potrebbe funzionare o meno per te. Potrebbe essere necessario stringere gli interni prima di stringere gli esterni (gah!).
In ogni caso, spero che il mio suggerimento possa essere un primo passo.