【发布时间】: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