노드에서 객체를 검사 / 반복하는 방법은 무엇입니까?
-
09-12-2019 - |
문제
몽구스 쿼리에서 결과 (오브젝트)를 다시 시작하고 일부 키를 교체 / 제거하고 객체를 문자로 보내고 클라이언트로 보냅니다.
i console.log 객체를 사용하면 모든 것이 좋습니다 (모든 키는 나열되지 않으며, 더 이상 없음). 물체에 대해 내가 할 일을 할 때, 숨겨진 필드가 아무데도 (그리고 관심의 열쇠가 없어). 그들은 의미가 있습니다 - 그들은 몽구스에 속한다. 그러나 나는 그들을 원하지 않는다. object.keys 또는 object.geTownPropertyNames object - 숨겨진 필드 팝업을 사용할 때 똑같은 일이 발생합니다.
util.inspect (obj, true, null, true)로 요소를 검사하고 결과를 콘솔에 기록하고 싶었습니다. 콘솔의 결과는 Console.와 마찬가지로 동일합니다. 객체가 검사없이 직접 객체를 직접 가져 왔습니다.
이제 두 가지 질문;
- 객체에 대한 내부 / 숨겨진 정보를 실제로 올바르게 검사 할 수 있습니까?
- 어떻게 물체를 반복 할 수 있고 필드 만 얻을 수 있습니까? (예, for..in 루프 내에서 hasownproperty 확인을하고 있습니다)
// 편집
확인, 알았어. 일부 조사 후에, 몽구스 객체가 그 속성을 프록시하고 Console.logs가 예상되는 출력 구조에있는 이유를 설명하는 tojson 함수가 있음을 깨달았습니다. 해결책은 몽구스 자체 toobject 메소드를 사용하는 것입니다.
.mongooseObj.toObject({ getters: true, virtuals: false })
이렇게하면 Object.GetOwnPropertyNames를 반복하고 클라이언트가 알고 싶지 않으려면 키를 교체 / 제거합니다!
해결책
문서 을보고 있다는 것을 짐작할 것입니다.데이터를 참조하십시오.내 추측이 맞으면 아마 이와 같이 원할 것입니다 :
.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));
});
다른 팁
또한 문서에서 특정 필드에 액세스하려는 경우 에서 볼 수 있습니다 :
문서 # get
.// path
doc.get('age') // 47
// dynamic casting to a string
doc.get('age', String) // "47"