MongoDBのmLabから返されるプロミスに問題があります。データの一部が正しく渡され、残りは未定義です。私はここで何が起こっているのか分かりません。プロミスは解決しましたが、データの一部を返します - 残りは '未定義です'
これは、私が接続するmLabのコレクションのJSONオブジェクトです。
{
"_id": {
"$oid": "591424da932aad14186a7213"
},
"name": "Archos Elements 50 Oxygen",
"weight_oz": 4.59,
"battery_capacity_mAh": 2300,
"platform": "Android",
"date": {
"$date": "2017-05-11T08:46:18.684Z"
},
"dimensions": {
"width_mm": 70.5,
"height_mm": 143,
"depth_mm": 9.9
},
"__v": 0
}
これは私がデータを取得する方法である(体パーサは、HTMLフォームを介してユーザ入力する電話の「名前」を捕捉するために使用される)
router.post('/page_2', function(req, res){
phone = req.body.phone
mobile_and_tablet_model.find({name:phone}).exec(function(err, result) {
if (err)
throw err;
}).then(function(MongoDBdata){
console.log(MongoDBdata[0]) // logs out entire JSON object correctly
console.log(MongoDBdata[0]._id) // 5002
console.log(MongoDBdata[0].name) // Archos Elements 50 Oxygen
console.log(MongoDBdata[0].weight_oz) // undefined
console.log(MongoDBdata[0].battery_capacity_mAh) // undefined
console.log(MongoDBdata[0].platform) // Android
console.log(MongoDBdata[0].date) // 2017-05-11T08:06:27.894Z
console.log(MongoDBdata[0].dimensions) // undefined
res.render('page_2.hbs', {
title: 'some title',
phone: phone,
battery_capacity: MongoDBdata[0].battery_capacity_mAh, // undefined
platform: MongoDBdata[0].platform // Android
})
})
})
誰かが私には、この動作を理解するのに役立ちます&私はそれを修正するのに役立ちますか
なぜJSONオブジェクトのネストされた値が「未定義」になっているのかわかりません。私はPromisesの専門家ではありませんが、正しく理解すれば約束が解決されているので、ここでsync/asyncの振る舞いは重要ではありませんか? (特に、console.log(MongoDBdata [0])がJSONコンテンツを完全にログアウトしたため)。
非常に高く評価されました!
なぜ 'exec()'のコールバックと、それらのうちの1つだけを使うことができる約束を使用していますか? 'exec()'は約束を返して、 '.catch(関数(エラー){//あなたがこのエラーで何を望むか}}でエラーを処理できるようにします;' – mJehanno
@mJehannoのコメントありがとう。それに応じてコードを調整しました。完璧な意味合いを持つ。残念ながら、問題は依然として続きます。 – user7861743