MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Trier les clés dans l'objet de réponse de Mongoose dans ExpressJS et NodeJS

Express' res.send la méthode reconnaît cet artist est un objet et appelle JSON.stringify dessus pour convertir l'objet en une chaîne JSON avant de l'envoyer. En simplifiant un peu, le JSON.stringify la méthode parcourt votre artist les clés d'objet dans l'ordre dans lequel elles ont été créées. (Voici un lien vers l'explication de commande plus compliquée. ) Cela explique le comportement actuel.

D'autres peuvent faire leurs propres propositions sur la façon dont vous pourriez faire ce que vous visez, mais en voici une simple à essayer d'abord :

  • Tout d'abord, faites votre propre JSON.stringify , en utilisant un "remplacement" pour créer l'ordre de sortie souhaité :

    const artistString = JSON.stringify(artist, ["realName", "stageName", ...])
    // '{"realName": "Paul David Hewson", "stageName": "Bono", ...}'
    
  • Ensuite, utilisez res.json(artistString) , plutôt que res.send , pour envoyer votre chaîne JSON avec le Content-Type correct entête. (res.send supposera que vous voulezContent-Type: “text/html” .)

Il existe certainement des approches plus compliquées, notamment la création d'une fonction qui récupère les clés, les trie et renvoie un remplaçant; ou écrire votre propre .toJSON() remplacer JSON.stringify . Vous devrez peut-être implémenter l'une de ces approches, car vous avez des objets imbriqués ; le comportement du remplaçant peut être un peu bizarre dans ce cas . Vous pourrez peut-être répertorier les propriétés imbriquées immédiatement après le parent, comme :

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

mais puisque vous avez les mêmes noms pour certaines propriétés imbriquées, cela peut ou non fonctionner pour vous. Vous devrez peut-être stringifier l'intérieur avant de stringifier l'extérieur (gah !).

En tout cas, j'espère que ma suggestion pourra être une première étape.