2014-02-25 80 views
0

我正在使用此問題的標題中提到的所有模塊使用此項目。 當我發送文本消息時,計算機可以通過串口讀取它,並且它會做的第一件事是查看數字是否在數據庫中註冊。這是該代碼:node.js/express/mysql/serialport/socket.io

function consultarNumero(head, body, numero){ 
    connection.query('SELECT * FROM devices WHERE nro_telefono = "'+numero+'"', function(err, result){ 
    if(err){ 
     console.log(err); 
    }else{ 
     if(result[0]['id']!=null){ 
     var idEmbarcacion = result[0]['id']; 
     //readingData.dividirPartes(head, body, idEmbarcacion); <- some other function 
     }else{ 
     return false; 
     } 
    } 
    }); 
} 

此代碼的工作,因爲我使用了測試的電話號碼在數據庫中註冊,但是如果我從另一個手機發送信息,錯誤將拿出說:「不能讀取未定義的屬性'id'」。

所以顯然「if(result [0] ['id']!= null)」是不正確的路要走。 我試過「if(result.length)!= 0」,但是結果數組的長度總是大於0,即使數字沒有註冊,因爲如果它找不到任何東西,它將返回「未定義」。

當然,我知道如果hpone號碼沒有註冊,那麼'id'將不會被使用。問題是我無法弄清楚如何編輯這個查詢來添加一個不同的行爲,如果這個數字沒有註冊,因爲當系統實現時,可以從隨機的電話號碼接收消息。

回答

1

如果result確實是undefined當沒有結果時,那麼result[0]也應該是undefined。下面的例子不應該通過if (result)的第一次評估,然後它應該安全地到達其他人。

if (result && result[0] && result[0]['id']) {} 
+0

很好,工作!我並不認爲在評估過程中一點一點進入陣列就是解決方案。謝謝 – arrigonfr