MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Classificar chaves no objeto de resposta do Mongoose no ExpressJS e NodeJS


Express' res.send O método reconhece que artist é um objeto e chama JSON.stringify nele para converter o objeto em uma string JSON antes de enviar. Simplificando um pouco, o JSON.stringify método itera através de seu artist chaves de objeto na ordem em que foram criadas. (Aqui está um link para a explicação de pedido mais complicada. ) Isso explica o comportamento atual.

Outros podem concordar com suas próprias propostas de como você pode fazer o que deseja, mas aqui está uma simples para tentar primeiro:

  • Primeiro, faça o seu próprio JSON.stringify , usando um "substituto" para criar a ordem de saída desejada :
    const artistString = JSON.stringify(artist, ["realName", "stageName", ...])
    // '{"realName": "Paul David Hewson", "stageName": "Bono", ...}'
    

  • Em seguida, use res.json(artistString) , em vez de res.send , para enviar sua string JSON com o Content-Type correto cabeçalho. (res.send assumirá que você deseja Content-Type: “text/html” .)

Existem abordagens definitivamente mais complicadas, incluindo a criação de uma função que obtém chaves, classifica-as e retorna um substituto; ou escrevendo seu próprio .toJSON() substituto para JSON.stringify . Você pode precisar implementar uma dessas abordagens, porque você tem objetos aninhados; o comportamento do substituto pode ser um pouco instável neste caso . Você pode listar as propriedades aninhadas imediatamente após o pai, como:
["realName", "type", ...]

mas como você tem os mesmos nomes para algumas propriedades aninhadas, isso pode ou não funcionar para você. Você pode ter que stringify o interior antes de stringify o exterior (gah!).

De qualquer forma, espero que minha sugestão possa ser um primeiro passo.