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óprioJSON.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, useres.json(artistString)
, em vez deres.send
, para enviar sua string JSON com oContent-Type
correto cabeçalho. (res.send
assumirá que você desejaContent-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.