【问题标题】:How to use json object with where clause?如何使用带有 where 子句的 json 对象?
【发布时间】:2019-08-31 03:14:56
【问题描述】:

我正在努力实现的目标

找到所有经过身份验证的用户团队中的玩家。

有什么问题?

无法在 const findUsers = await User.findAll where 子句中使用返回的 json,我不确定这是否正确。

数据库表

用户表:id (PK) 等

团队:id(PK)等

TeamUsers:id、TeamID(外键)、UserID(外键)等

从 FindTeamUsers (Var ob) 返回 Json,这是正确的

[{"id":2,"TeamID":1,"UserID":1,"createdAt":"2019-08-09","updatedAt":"2019-08-09"},{"id":3,"TeamID":1,"UserID":3,"createdAt":"2019-08-09","updatedAt":"2019-08-09"},{"id":76,"TeamID":1,"UserID":5,"createdAt":"2019-08-22","updatedAt":"2019-08-22"}]

下面是我目前使用 Nodejs、ExpressJS 使用的 Route

router.get('/Team', auth, async function(req, res) {

 // -- Get the Users team that is currently Authenticated (req.user.id (auth) )
     const findTeam = await TeamUsers.findOne({
        where: {
          UserID: req.user.id
        }
      });

      //If the User has a team
      if (findTeam) {

  // -- Get the players Team Mates who have the matching TeamID
        const findTeamUsers = await TeamUsers.findAll({

          where: {
            TeamID: findTeam.TeamID
          }

        });
//Store the object and Display in JSON FORMAT
         var ob = JSON.stringify(findTeamUsers);
         console.log(ob);

        if (!findTeamUsers) {
          console.log('error');
        } else {
          //find the Users Details From the Users Table Model
          //findTeamUsers - Is an array of each record found from const findTeamUsers = await TeamUsers.findAll
          const findUsers = await User.findAll({
            where: {
              id: ob.UserID
            }
          });

          res.status(200).json(findUsers);


        }
      }

    });

【问题讨论】:

  • 您遇到什么错误? findTeam is undefined 或许?
  • @silencedogood 错误:WHERE 参数“id”具有无效的“未定义”值。这是来自 FindUsers 中的 ob.id 。 FindTeamUsers 工作正常。
  • 不得不更改我的代码 findteamusers.UserID ,应该是 ob.id 。 ob 是对象,id 是指 USers 表中的用户 id
  • 查看您的ob 对象,id 应该以ob[0].id 的形式访问...

标签: node.js sequelize.js


【解决方案1】:

您的obstring,所以ob.UserIDundefinedfindTeamUsers (FindTeamUsers 结果) 是一个对象数组,所以 findTeamUsers.UserID 也将是 undefined。 (数组findTeamUsers 没有属性UserID)。

你可以传递an array of UserIDs to search multiple elements(如果你想在数组中找到所有UserIDs):

User.findAll({
  where: {
    id: findTeamUsers.map(o => o.UserID)
  }
})

【讨论】:

  • 感谢您的回复,我已经在那里尝试过了,我收到了这个错误。 TypeError: ob.map 不是函数
  • whops 没注意到,你的obstringfindTeamUsers 应该是数组,使用它。更新答案
猜你喜欢
  • 1970-01-01
  • 2020-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-23
  • 2021-08-01
  • 2019-01-29
  • 2023-02-04
相关资源
最近更新 更多