2016-11-01 3 views
0

私はイベントを作成して他のユーザーを招待できるプログラムを紹介して遊んでいました。私はあなたがデータを取得するためにジョインテーブルを使用できることを知っていますが、私は、データがPOSTGRESQLを使用して自分自身を入れ子にして、ユーザーがホストしている、出席している、そしてIDに基づいて招待されたイベントを表示する方法があることを期待していました。イベント。ここでpostgresを使ったエクスプレスアプリのデータのネスト

は、私がこれまで持っているものです。

app.get('/api/users', function(req, res) { 
var list = []; 
User.findAll().then(function(users) { 
    for(var i in users) { 
    var item = { 
     id:   users[i].dataValues['id'], 
     firstName: users[i].dataValues['firstname'], 
     lastName: users[i].dataValues['lastname'], 
     email:  users[i].dataValues['email'], 
     phone:  users[i].dataValues['phone'], 
     image:  users[i].dataValues['image'], 
     confirmed: users[i].dataValues['confirmed'], 
     events: [] 
    } 
    Event.findAll({ where: { hosting_id: user.id }}).then(function(events) { 
     for(var i in events) { 
     item.events.push({ 
      hosting: event[i].dataValues['id'], 
      attending: event[i].dataValues['id'], 
      invites: event[i].dataValues['id'] 
     }) 
     } 
    }) 
    list.push(item) 
    } 
    res.json(list) 
}) 
}); 

は、私はそれがループとidを介してユーザーに関連付けられているすべてのイベントを見つけることができるように、それを持ってすることができましたが、私はよまだそれは、次の例のように、イベントIDを表示できるように、それはそれぞれ1で接続しているとどのように苦しん:

{ 
"id": "4", 
"firstName": "Jon", 
"lastName": "Doe", 
"email": "[email protected]", 
"phone": "1234567890", 
"image": "", 
"events": { 
    "hosting": [ 
    "1"], 
    "attending": [], 
    "invites": [ 
    "3", "4"] 
    }, 
"confirmed": true 
} 

表示情報を持つだけでなく、私もそれが必要になりますかどうかを把握しようとしていますPOSTGRESデータベース内でネストするか、join tablのようなものを使うことができるかeを使用していますが、別のAPI呼び出しを使用せずに情報表示を保持しています。

ご協力いただければ幸いです!前もって感謝します!

答えて

0

Event.findAllはPromiseであり、非同期に実行されます。 その呼び出し後にのみ応答を書式設定する必要があります。

あなたはこのような何かを試してみて、それが動作するかどうかを確認することができます

Promise.all(
    users.map(function(user) { 
    return Event.findaAll({ where: { hosting_id: user.id }}) 
     .then(function(events) { 
     var formatEvents = events.map(function(event) { 
      return { 
      hosting: event.id, 
      attending: event.id, 
      invites: event.id 
      }; 
     }) 
     return Promise.resolve({ 
      id:   users[i].dataValues['id'], 
      firstName: users[i].dataValues['firstname'], 
      lastName: users[i].dataValues['lastname'], 
      email:  users[i].dataValues['email'], 
      phone:  users[i].dataValues['phone'], 
      image:  users[i].dataValues['image'], 
      confirmed: users[i].dataValues['confirmed'], 
      events:  formatEvents 
     }); 
     }) 
    }) 
) 
    .then(function(list) { 
    res.json(list) 
    }) 

をまたはGETユーザーはイベントモデルが含まれている場合、あなたはまた、ユーザーとイベントとの間の関係を追加することができます。

関連する問題