【问题标题】:Cannot read property 'match' of null"无法读取 null 的属性“匹配””
【发布时间】:2022-07-12 21:22:17
【问题描述】:

所以我正在开发搜索栏功能,您可以在其中搜索姓名、电子邮件、电话、个人号码,我已经有了姓名和电子邮件,而且效果很好,但是,我添加了电话和个人号码,然后我开始收到这些错误...我现在可以搜索电话和电子邮件,但是当我尝试搜索个人号码和姓名时,我得到了无法读取 null 的属性“匹配””来自控制台的错误...

 user: async () => {
  const accessibleUsers = await UserController.getAccessible(req);
  const userCollection = db.collection(User.tableName);
  const nativeResults = await userCollection.find({
    _id: { $in: accessibleUsers.map((val) => ObjectID(val)) },
    vc_isLogEntity: false,
    // deleted: false, //TODO RN-732 Add back
    $or: [
      { email: matchRegex },
      { firstName: matchRegex },
      { lastName: matchRegex },
      { phone: matchRegex },
      { personnelNumber: matchRegex }
    ]
  }, {_id: 1}).toArray();

  const users = await User
    .find(nativeResults.map(r => `${r._id}`))
    .populate('role');
  return users.map(user => ({
    type: 'user',
    value: user,
    ...getMatches(user, ['email', 'firstName', 'lastName', 'phone', 'personnelNumber'])
  }));

我刚刚在代码中添加了 { phone: matchRegex },{personnelNumber: matchRegex } 和 'phone', 'personnelNumber'。有人可以帮我避免这个错误吗?

【问题讨论】:

  • 您显示的代码中没有.match。请显示完整的错误堆栈及其引用的代码。
  • @CherryDT 不是getMatches.Match 吗?
  • 也许它包含那个,但我们不知道你是否不显示它。请显示完整的错误堆栈和堆栈引用的每一行周围的代码(至少在相关的函数中,即您已经显示的函数的顶部和内部)。现在,您只显示了一条错误消息(甚至没有堆栈),该错误消息源自您显示的代码中未包含的行,即使它被您显示的代码调用(基于无处)一个属性match 被访问),我们不知道确切的位置,因为您没有标记堆栈引用的行。
  • 我的意思是,我当然可以猜测(我想说,也许某些字段可以是null,但您仍然可以在它们上调用.match - 这可能有在属性访问上使用可选链接的最简单解决方案),但实际查看堆栈和崩溃代码会更有意义:)
  • 我也觉得你两次访问数据库有点奇怪。为什么不在一个查询中进行呢?它会简化一些事情。 (另外,`${x}` 没有用,因为它与 x 相同。)

标签: javascript backend sails.js


【解决方案1】:

我认为个人号码检查拼写并检查您是否在搜索全名/名字和姓氏?

【讨论】:

  • 不,个人号码拼写正确。我是那样做的...基本上您可以搜索名字和姓氏,它会为您显示他们两个...但是在添加新代码后,我开始遇到该错误
猜你喜欢
  • 2018-03-03
  • 1970-01-01
  • 2018-07-02
  • 2020-10-20
  • 2018-12-08
  • 2017-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多