Javascript Mongo查询返回数据的错误处理

Javascript Mongo查询返回数据的错误处理,javascript,node.js,mongodb,mongoose,error-handling,Javascript,Node.js,Mongodb,Mongoose,Error Handling,我还是个新手,但我正在使用一个门户网站让人们检查一个人是否是俱乐部的成员。我使用mongodb和mongoose来实现这一点,但是当输入一个不在数据库中的数字时,返回一个错误“TypeError:无法读取未定义的属性'username'”很公平,但我不确定如何处理这个错误,请参阅下面的代码:我知道有几种方法可以重构和整理我的代码,但我想知道的是猫鼬的错误处理。干杯您需要检查您获得的数组是否为空: 以下是您可以尝试的内容: app.get('/checkmembership', function(

我还是个新手,但我正在使用一个门户网站让人们检查一个人是否是俱乐部的成员。我使用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 {

            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船长,它也工作得非常好。当我看到你的评论时,我打了自己一巴掌,这很有道理,真不敢相信我没有想到。别担心,给它一些时间,你会做得更好!!祝你一切顺利!