MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Ordina le chiavi nell'oggetto di risposta da Mongoose in ExpressJS e NodeJS

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 il Content-Type corretto intestazione. (res.send presumerà che tu voglia Content-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.