簡體   English   中英

從Mongo Query返回的數據的錯誤處理

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM