sql >> Base de Datos >  >> NoSQL >> MongoDB

Ordenar claves en el objeto de respuesta de Mongoose en ExpressJS y NodeJS

Express' res.send El método reconoce que artist es un objeto y llama a JSON.stringify en él para convertir el objeto en una cadena JSON antes de enviarlo. Simplificando un poco, JSON.stringify el método itera a través de su artist claves de objeto en el orden en que fueron creadas. (Aquí hay un enlace a la explicación de pedidos más complicada. ) Eso explica el comportamiento actual.

Es posible que otros participen con sus propias propuestas sobre cómo podría hacer lo que busca, pero aquí hay una simple para probar primero:

  • Primero, haz tu propio JSON.stringify , utilizando un "reemplazador" para crear el orden de salida que desea :

    const artistString = JSON.stringify(artist, ["realName", "stageName", ...])
    // '{"realName": "Paul David Hewson", "stageName": "Bono", ...}'
    
  • Luego, usa res.json(artistString) , en lugar de res.send , para enviar su cadena JSON con el Content-Type correcto encabezamiento. (res.send asumirá que desea Content-Type: “text/html” .)

Definitivamente, existen enfoques más complicados, incluida la creación de una función que obtiene claves, las ordena y devuelve un reemplazo; o escribiendo su propio .toJSON() sustituir por JSON.stringify . Es posible que deba implementar uno de estos enfoques, porque tiene objetos anidados; el comportamiento del sustituto puede ser un poco raro en este caso . Es posible que pueda enumerar las propiedades anidadas inmediatamente después del padre, como:

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

pero dado que tiene los mismos nombres para algunas propiedades anidadas, esto puede o no funcionar para usted. Es posible que tengas que enhebrar el interior antes de enhebrar el exterior (¡vaya!).

En cualquier caso, espero que mi sugerencia pueda ser un primer paso.