Javascript Mongo查询返回数据的错误处理
我还是个新手,但我正在使用一个门户网站让人们检查一个人是否是俱乐部的成员。我使用mongodb和mongoose来实现这一点,但是当输入一个不在数据库中的数字时,返回一个错误“TypeError:无法读取未定义的属性'username'”很公平,但我不确定如何处理这个错误,请参阅下面的代码:我知道有几种方法可以重构和整理我的代码,但我想知道的是猫鼬的错误处理。干杯您需要检查您获得的数组是否为空: 以下是您可以尝试的内容:Javascript Mongo查询返回数据的错误处理,javascript,node.js,mongodb,mongoose,error-handling,Javascript,Node.js,Mongodb,Mongoose,Error Handling,我还是个新手,但我正在使用一个门户网站让人们检查一个人是否是俱乐部的成员。我使用mongodb和mongoose来实现这一点,但是当输入一个不在数据库中的数字时,返回一个错误“TypeError:无法读取未定义的属性'username'”很公平,但我不确定如何处理这个错误,请参阅下面的代码:我知道有几种方法可以重构和整理我的代码,但我想知道的是猫鼬的错误处理。干杯您需要检查您获得的数组是否为空: 以下是您可以尝试的内容: app.get('/checkmembership', function(
app.get('/checkmembership', function(req, res) {
var jsonResponse = {};
var returnArray =[];
var dbArray,
queryArray,
resulta,
resultb,
resultc,
resultd,
resulte,
resultf;
console.log("before running compareDetails " + returnArray);
User.find({username:req.query.memberIdQuery}, function(err, foundData){
if(err){
console.log(err);
} else {
if(foundData && foundData.length) {
dbArray = [foundData[0].username,foundData[0].emailaddress,foundData[0].surname];
console.log(dbArray);
dbArray = dbArray.join('|').toLowerCase().split('|');
console.log(dbArray);
queryArray = [req.query.memberIdQuery,req.query.emailQuery,req.query.surnameQuery];
console.log(queryArray);
queryArray = queryArray.join('|').toLowerCase().split('|');
console.log(queryArray);
returnArray = compareDetails(queryArray, dbArray);
resulta = returnArray[0];
resultb = returnArray[1];
resultc = returnArray[2];
resultd = returnArray[3];
resulte = returnArray[4];
resultf = returnArray[5];
jsonResponse = {
set_attributes:
{
resulta : resulta,
resultb : resultb,
resultc : resultc,
resultd : resultd,
resulte : resulte,
resultf : resultf
},
};
res.send(jsonResponse);
} else {
res.send("Empty result");
}
}
});
});
当输入的数字不在数据库中时,返回一个错误“TypeError:无法读取未定义的属性'username'”
这是因为,默认情况下,当没有匹配记录时,foundData
将是一个空数组[]
。所以
foundData[0]
,从技术上讲,它将是一个未定义的
执行查询时,结果将是一个文档数组
来源
为了避免此错误,可以在访问foundData
的第0个元素之前检查其大小
对代码进行这些更改
app.get('/checkmembership', function (req, res) {
let {memberIdQuery, emailQuery, surnameQuery} = req.query;
User.find({
username: memberIdQuery
}, function (err, foundData) {
if (err) {
console.log(err);
return res.status(500).send({
msg: `memberIdQuery = ${memberIdQuery} doesnt exist`
});
}
if (!foundData || foundData.length === 0) {
return res.status(200).send({
msg: `No records found for memberIdQuery = ${memberIdQuery}`
});
}
let dbArray = [
foundData[0].username,
foundData[0].emailaddress,
foundData[0].surname
];
dbArray = dbArray.join('|').toLowerCase().split('|');
let queryArray = [
memberIdQuery,
emailQuery,
surnameQuery
];
queryArray = queryArray.join('|').toLowerCase().split('|');
let [resulta, resultb, resultc, resultd, resulte, resultf] = compareDetails(queryArray, dbArray);
return res.send({
set_attributes: {
resulta: resulta,
resultb: resultb,
resultc: resultc,
resultd: resultd,
resulte: resulte,
resultf: resultf
},
});
});
});
谢谢Sridhar,它工作得非常好,也处理了我今天早上计划进行的许多重构。谢谢Jack船长,它也工作得非常好。当我看到你的评论时,我打了自己一巴掌,这很有道理,真不敢相信我没有想到。别担心,给它一些时间,你会做得更好!!祝你一切顺利!