オブジェクトを文字列化してクライアントに送信する前に、mongoose クエリから結果 (オブジェクト) を取得していて、いくつかのキーを置換/削除したいと考えています。
オブジェクトをコンソールログに記録すると、すべてがうまくいきます(すべてのキーがリストされ、それ以上のものはありません)。オブジェクトに対して for..in を実行すると、非表示のフィールドがどこからともなくポップアップします (対象のキーはポップアップしません)。それらは理にかなっています-それらはマングースに属しています-しかし、私はそれらを望んでいません。オブジェクトで Object.keys または Object.getOwnPropertyNames を使用すると、同じことが起こります - 隠しフィールドのポップアップは役に立ちません。
そこで、util.inspect(obj,true,null,true) を使用して要素を検査し、結果をコンソールに記録したいと考えました。コンソールでの結果は同じで、検査なしでオブジェクトを直接 console.logged したかのようです。
では、2 つの質問があります。
- オブジェクトに関する内部/非表示の情報を実際に取得するために、オブジェクトを正しく検査するにはどうすればよいですか?
- オブジェクトを反復処理してフィールドのみを取得するにはどうすればよいですか? (はい、for..in ループ内で hasOwnProperty チェックを行っています)
//編集
はい、分かりました。いくつかの調査の後、mongoose オブジェクトがそのプロパティをプロキシし、toJSON 関数を持っていることがわかりました。これは、console.logs が予期された出力構造にある理由を説明しています。解決策は、Mongoose 独自の toObject メソッドを使用することです。
mongooseObj.toObject({ getters: true, virtuals: false })
このようにして、Object.getOwnPropertyNames を反復処理し、クライアントに知られたくないキーを置換/削除できます。