Pergunta

Estou recebendo um resultado (o objeto) de uma consulta do mangusto e quero substituir/remover algumas chaves, antes de restringir o objeto e enviá-lo ao cliente.

Quando eu console.log o objeto, tudo está bem (todas as chaves estão listadas, nada mais).Quando faço um for..in no objeto, campos ocultos aparecem do nada (e as chaves de interesse, não).Eles fazem sentido - pertencem ao mangusto - mas eu não os quero.A mesma coisa acontece, ao usar Object.keys ou Object.getOwnPropertyNames no objeto - pop-up de campos ocultos, nenhum útil.

Então, eu queria inspecionar o elemento com util.inspect(obj,true,null,true) e registrar o resultado no console.O resultado no console é o mesmo, como se eu tivesse console.logado o objeto diretamente, sem a inspeção.

Agora, duas perguntas;

  1. Como inspeciono corretamente um objeto, para realmente obter informações internas/ocultas sobre o objeto?
  2. Como posso iterar sobre o objeto e obter apenas os campos?(sim, estou fazendo a verificação hasOwnProperty dentro do loop for..in)

//EDITAR

OK, entendi.Após alguma investigação, percebi que o objeto mongoose faz proxy de suas propriedades e possui uma função toJSON, o que explica por que console.logs estava na estrutura de saída esperada.A solução é usar o método toObject do próprio Mongoose;

mongooseObj.toObject({ getters: true, virtuals: false })

Dessa forma, posso iterar Object.getOwnPropertyNames e substituir/remover chaves que não quero que o cliente conheça!

Foi útil?

Solução

Eu vou adivinhar que você está olhando para o Documento objeto retornado por uma consulta mongoose quando você realmente deseja apenas ver os dados.Se meu palpite estiver correto, você provavelmente desejará algo assim:

Model.findOne({ name: 'john' }, function (err, doc) {
    var data = doc.toObject();

    // do whatever you need to with data
    delete data.age;
    delete data.weight;
    data.isAwesome = true;

    // now stringify the data and do something with it
    callback(JSON.stringify(data));
});

Outras dicas

Além disso, se você quiser acessar um determinado campo de um Documento você pode dar uma olhada em:

Documento#obter

// path
doc.get('age') // 47

// dynamic casting to a string
doc.get('age', String) // "47"
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top