sql >> Database >  >> NoSQL >> MongoDB

Sorteer sleutels in responsobject van Mongoose in ExpressJS en NodeJS

Express' res.send methode herkent dat artist is een Object, en roept JSON.stringify . aan erop om het object naar een JSON-tekenreeks te converteren voordat het wordt verzonden. Een beetje vereenvoudigend, de JSON.stringify methode herhaalt zich door je artist objectsleutels in de volgorde waarin ze zijn gemaakt. (Hier is een link naar de meer gecompliceerde besteluitleg. ) Dat verklaart het huidige gedrag.

Anderen komen misschien met hun eigen voorstellen voor hoe u zou kunnen doen wat u wilt, maar hier is een eenvoudige om eerst te proberen:

  • Doe eerst uw eigen JSON.stringify , gebruik een "replacer" om de gewenste uitvoervolgorde te maken :

    const artistString = JSON.stringify(artist, ["realName", "stageName", ...])
    // '{"realName": "Paul David Hewson", "stageName": "Bono", ...}'
    
  • Gebruik dan res.json(artistString) , in plaats van res.send , om uw JSON-tekenreeks te verzenden met het juiste Content-Type kop. (res.send gaat ervan uit dat je wiltContent-Type: “text/html” .)

Er zijn zeker meer gecompliceerde benaderingen, waaronder het maken van een functie die sleutels krijgt, sorteert en een vervanger retourneert; of het schrijven van uw eigen .toJSON() vervanging voor JSON.stringify . Mogelijk moet u een van deze benaderingen implementeren, omdat u geneste objecten hebt; het gedrag van de vervanger kan een beetje zijn wankel in dit geval . Mogelijk kunt u de geneste eigenschappen direct na de bovenliggende eigenschappen weergeven, zoals:

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

maar aangezien u voor sommige geneste eigenschappen dezelfde namen heeft, kan dit wel of niet voor u werken. Het kan zijn dat je de binnenkant moet verstrengelen voordat je de buitenkant kunt verstrengelen (gah!).

In ieder geval kan mijn suggestie hopelijk een eerste stap zijn.




  1. Wat kan worden gedaan met Mongo Aggregation / Prestaties van Mongo Aggregation

  2. Hoe werk ik MongoDB-documentvelden alleen bij als ze niet bestaan?

  3. Wat zijn naamgevingsconventies voor MongoDB?

  4. Node.js mongodb-stuurprogramma async/wacht op vragen