2017-05-11 4 views
0

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コンテンツを完全にログアウトしたため)。

非常に高く評価されました!

+0

なぜ 'exec()'のコールバックと、それらのうちの1つだけを使うことができる約束を使用していますか? 'exec()'は約束を返して、 '.catch(関数(エラー){//あなたがこのエラーで何を望むか}}でエラーを処理できるようにします;' – mJehanno

+0

@mJehannoのコメントありがとう。それに応じてコードを調整しました。完璧な意味合いを持つ。残念ながら、問題は依然として続きます。 – user7861743

答えて

0

最後にそれを得ました。

それは私が調整されていないスキーマ(一方のスキーマはMongoDBは、検索のための別のものにデータをアップロードするために使用した - 私は、ダウンロードするためのもう一つのアップロードのための1つの変更、しかしされていない)に問題があった

そのため、コレクションから取得したJSONが100%正しくログアウトしていても、一部のデータが「未定義」を返す可能性があります。オブジェクトのネストされた値にアクセスしようとしたとき、私は誤ったマングースモデルを効果的に使用していました。

下の作業のスキーマ(「未定義」を返すすべての値が正しい値を返すようになりました)。うまくいけば誰かが私の間違いの恩恵を受けることができます

関連する問題