2016-12-25 8 views
2

Я новичок в Node Js и связанных с ним программах. В настоящее время вы пытаетесь создать приложение, которое загружает изображения с титрами и т. Д., И пользователям нравится и комментировать (более похоже на instagram/facebook). Пока мое приложение работает, но теперь застряло в точке, когда я пытаюсь вытащить несколько значений из нескольких таблиц, передавая значения как объекты в массиве и визуализируя их в новом EJS-файле. Ниже приведен кодSequelize Вытягивание данных из нескольких таблиц и передача как объектов для рендеринга в EJS

app.get('/pages/photos/:id', function (req, res){ 
//show photos with comments 
//1. photo with id :id 
// 2. all comments associated with id :id 
//likes associated with photo 
var photoId=req.params.id; 
var photoData = [] 
Photos.findOne({ 
    where:{id: photoId}, 
    attributes: ['userId','filename', 'caption', 'createdAt'] 
}).then(function (rowPhoto){ 
photoData.photoValues = [] 
var vals = { 
    photoId:photoId, 
    userId:rowPhoto.userId, 
    photoName: rowPhoto.filename, 
    caption:rowPhoto.caption, 
    createdAt:rowPhoto.createdAt 
} 
photoData.photoValues.push(vals); 
console.log("#1 "+ rowPhoto.caption); 

}).then(function(){ 
Comments.findAll(
    {where: 
     {photoId:photoId} 
    }).then(function(rowComments){ 
photoData.photoComments= [] 
for (i=0; i < rowComments.length ; i++){ 
    vals = { 
    id: rowComments[i].id, 
    userId: rowComments[i].userId, 
    text:rowComments[i].comment, 
    createdAt:rowComments[i].createdAt 
    } 
photoData.photoComments.push(vals); 
} 
console.log("#2 "+ rowComments.length); 
    }); 
    }).then(function(){ 
     Likes.findAll({ 
      where:{photoId:photoId} 
}).then(function(rowLikes){ 
    photoData.photoLikes= [] 
    for (i=0; i < rowLikes.length ; i++){ 
    vals = { 
    id: rowLikes[i].id, 
    liked: rowLikes[i].liked, 
    userId:rowLikes[i].userId, 
    photoId:rowLikes[i].photoId 
    } 
    photoData.photoLikes.push(vals); 

     } 
    console.log("#3 " + rowLikes[i]); 

      }); 
    }); 
console.log("#4 " + photoData); 
//res.render('views', {views:photoData}); 
}); 

есть ли более простой способ обойти это? Тем не менее, я еще не коснулся Миграции.

+0

так после нескольких попыток и больше исследований решения осенило, благодаря ответу от [ссылки] (http://stackoverflow.com/questions/ 33970624/выполнение запроса-множественная-модель-с-sequelize-JS-ORM) – Prince

ответ

3
Photos.findOne({ 
    where:{id: photoId}, 
    attributes: ['id','userId','filename', 'caption', 'createdAt'] 
      }).then(function (rowPhotos){ 
      Comments.findAll({ 
        where: {photoId:photoId} 
      }).then(function (rowComments){ 
       Likes.findAll({ 
        where: {photoId: photoId} 
       }).then(function (rowLikes){ 
        Users.findAll().then(function (commentUser){ 
      var data= { 
      photoData: rowPhotos, 
      commentData: rowComments, 
      likesData: rowLikes, 
      userData:commentUser 
      } 
      console.log(data); 
      res.render('views', {data:data}) 

        }) 

       }) 
     }) 
}) 

});

Это решения с любезной любезностью по ссылке ниже: Querying multiple models with Sequelize.js ORM