[英]Error handling for data returned from Mongo Query
仍然是相對的新手,但是我正在使用門戶網站讓人們檢查某個人是否是俱樂部的成員。 我正在使用mongodb和mongoose來執行此操作,但是當輸入的數字不在數據庫中時,將返回錯誤“ TypeError:無法讀取未定義的屬性'username'”,但我不確定要處理此錯誤,請參見下面的代碼:我知道有幾種方法可以重構和整理代碼,但這是我想知道的貓鼬錯誤處理方法。 干杯👍
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 {
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);
});
});
您需要檢查獲取的數組是否不為空:
您可以嘗試以下方法:
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]
技術上講將是undefined
。
執行查詢時,結果將是一個文檔數組。
原始 貓鼬文檔
為避免此錯誤,您可以在訪問它的第0個元素之前檢查foundData
的大小。
對您的代碼進行更改。
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
},
});
});
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.