Sequelize:连接表问题和查询结果

时间:2016-09-13 20:11:47

标签: javascript sql asynchronous sequelize.js

在IND朋友的INDEX函数中存在问题。我想最初将它设置为一个空数组,以便我可以将用户友谊连接表中的各个用户对象推送到所述数组。这是因为登录用户可以存在于userID列或friendID列下的友谊连接表中,具体取决于谁发起了友谊。

问题是由于异步性质,当我调用console.log(朋友)时,查询数据库的时间是毫秒,所以它仍然记录一个空数组。我希望数组中充满了不是当前用户的用户对象,这实际上是一个“myfriends”索引页面,它从后端API提供JSON。请记住我正在尝试为Json提供服务的事实,因此所有朋友用户对象都必须以一个单独的数组结束。

谢谢!

var user = require(“../../ models / index”)。user;     var friendship = require(“../../ models / index”)。friendship;

var friendshipController = {
  index: function(req, res) {
    var friends = [];
    var request = friendship.findAll({
      where: {
        status: "pending",
        $and: {
          $or: [
            {
              userId: req.session.user.id
            },
            {
              friendId: req.session.user.id
            }
          ]
        }
      }
    }).then(function(friendships) {
      res.json(friendships)
      var friends = []
      friendships.forEach(function(friendship) {
        if (req.session.user.id === friendship.userId) {
          user.findById(friendship.friendId).then(function(user) {
            friends.push(user);
          })
        } else {
          user.findById(friendship.userId).then(function(user) {
            friends.push(user);
          })
        }
      })
      console.log(friends);
    })
  },
  create: function(req, res) {
    friendship.create({
      userId: req.session.user.id,
      friendId: 3,
    }).then(function() {
      res.redirect("/")
    })
  },
  destroy: function(req, res) {
    friendship.findAll().then(function(f) {
      f.forEach(function(fn) {
        fn.destroy()
      })
    })
  }
}

module.exports = friendshipController;

1 个答案:

答案 0 :(得分:0)

解决方案:对于每个友谊,将登录用户的每个相邻朋友的id推送到数组...然后运行查询以查找该数组中的所有用户(显然是sequelize的一个功能),然后使用该json数据进行响应。

index: function(req, res) {
    var friends = [];
    var query = friendship.findAll({
      where: {
        status: "pending",
        $and: {
          $or: [
            {
              userId: req.session.user.id
            },
            {
              friendId: req.session.user.id
            }
          ]
        }
      }
    }).then(function(friendships) {
        var friendIds = [];
        friendships.forEach(function(friendship) {
          if (req.session.user.id === friendship.userId) {
            friendIds.push(friendship.friendId);
          }
          else {
            friendIds.push(friendship.userId);
          }
        });
        user.findAll({
          where: {
            id: friendIds
          }
        }).then(function(users) {
          res.json(users);
        })
    })
  }