【问题标题】:Cant seem to push and return a group of objects sequelize query似乎无法推送并返回一组对象续集查询
【发布时间】:2019-09-12 02:16:03
【问题描述】:

我有一个正在使用 sequelize 构建的后端。我有一个会发出获取请求的路由器。我希望这个 get 请求以特定的顺序做一些事情。

我希望 get 请求从 Members 获取具有用户 ID 的所有记录。 然后,我想运行一个循环,该循环使用 Group 表发出请求,该表在 for 循环的每次迭代中具有组的 id。

问题:我创建了一个数组,我想将 group 中每个请求的每个返回对象推送到单个数组 groups 中,然后在迭代完成后返回它,状态码为 200

代码如下:

控制器功能:

getUserMember: (req, res) => {
        let groups = [];
        let user_id = req.params.userId
        Member.findAll({ where: { userId: user_id } })
            .then((response) => {
                for(let i = 0; i < response.length; i++){
                    Group.findByPk(response[i]['groupId'])
                        .then((group) => {
                            console.log(JSON.stringify(group))
                            groups.push(JSON.stringify(group))
                        })
                        .catch((err) => {
                            console.log('Getting Group by Id error: ' + JSON.stringify(err))
                        })
                }
                console.log(groups)
                res.status(200).send(data)
            })
            .catch((err) => {
                console.log('Getting member by Id error: ' + JSON.stringify(err))
            })    
    },

记录响应:

Executing (default): SELECT "id", "balance", "open_tabs", "reference", "admin", "active", "DATE", "groupId", "userId" FROM "members" AS "member" WHERE "member"."userId" = '2';
[]
Getting member by Id error: {}
Executing (default): SELECT "id", "name", "description", "members", "reference", "active", "DATE", "HostId" FROM "groups" AS "group" WHERE "group"."id" = 1;
Executing (default): SELECT "id", "name", "description", "members", "reference", "active", "DATE", "HostId" FROM "groups" AS "group" WHERE "group"."id" = 3;
{"id":1,"name":"The Boys","description":null,"members":1,"reference":"32nv893f","active":true,"DATE":"2019-09-10T08:25:03.898Z","HostId":null}
{"id":3,"name":"testing2","description":"test of the homies","members":1,"reference":"scwc8s89","active":true,"DATE":"2019-09-11T06:01:40.978Z","HostId":2}

如你所见,我得到了 2 个对象,但它们没有推入组中

【问题讨论】:

  • 因为你的console.log(groups)不在then里面
  • 我希望它在所有 group 查询完成后返回组。发送的返回也是[]。它不是将数据推送到组数组中,这是我的问题,不是 console.log @AyushGupta

标签: javascript node.js sequelize.js


【解决方案1】:

您可以为此使用异步等待

getUserMember: async (req, res) => { //<----- HERE
  let groups = [];
  let user_id = req.params.userId
  Member.findAll({
      where: {
        userId: user_id
      }
    })
    .then((response) => {
      for (let i = 0; i < response.length; i++) {
          await Group.findByPk(response[i]['groupId']) //<----- HERE
          .then((group) => {
            console.log(JSON.stringify(group))
            groups.push(JSON.stringify(group))
          })
          .catch((err) => {
            console.log('Getting Group by Id error: ' + JSON.stringify(err))
          })
      }
      res.status(200).send(data)
      console.log(groups)
    })
    .catch((err) => {
      console.log('Getting member by Id error: ' + JSON.stringify(err))
    })
},

【讨论】:

    猜你喜欢
    • 2019-10-31
    • 1970-01-01
    • 2020-11-16
    • 1970-01-01
    • 1970-01-01
    • 2020-09-10
    • 1970-01-01
    • 1970-01-01
    • 2015-01-09
    相关资源
    最近更新 更多