Я получаю результат (объект) обратно из запроса мангуста и хочу заменить / удалить некоторые ключи, прежде чем я сделаю объект строковым и отправлю его клиенту.
Когда я console.log объект, все хорошо (перечислены все ключи, не более того). Когда я выполняю for..in на объекте, скрытые поля появляются из ниоткуда (а интересующие клавиши - нет). В них есть смысл - они принадлежат мангусту - но они мне не нужны. То же самое происходит при использовании Object.keys или Object.getOwnPropertyNames в объекте - всплывающее окно скрытых полей, ничего полезного.
Поэтому я хотел проверить элемент с помощью util.inspect (obj, true, null, true) и записать результат в консоль. Результат на консоли такой же, как если бы я console.log записал объект напрямую без проверки.
Теперь два вопроса;
- Как правильно проверить объект, чтобы получить внутреннюю / скрытую информацию об объекте?
- Как я могу перебирать объект и получать только поля? (да, я провожу проверку hasOwnProperty в цикле for..in)
// РЕДАКТИРОВАТЬ
Ладно, я понял. После некоторого исследования я понял, что объект mongoose проксирует свои свойства и имеет функцию toJSON, которая объясняет, почему console.logs находится в ожидаемой структуре вывода. Решение состоит в том, чтобы использовать собственный метод toObject Mongoose;
mongooseObj.toObject({ getters: true, virtuals: false })
Таким образом, я могу перебирать Object.getOwnPropertyNames и заменять / удалять ключи, о которых клиент не должен знать!