2017-09-07 125 views
2

我正在使用的MySQL的NodeJS包來查詢我的結果,但在檢索數據MySQL查詢返回空對象

具有麻煩
var mysql  = require('mysql'); 
var connection = mysql.createConnection({ 
host  : 'localhost', 
user  : 'root', 
password : 'PASSWORD', 
database : 'ambuCenter' 
}); 
var data; 
function do_queries(callback){ 
    connection.connect(); 
    connection.query(
     "SELECT * FROM customers", 
     function(err,result,fields){ 
      if (err) return callback(err,null); 
      callback(err,result); 
     } 
    ); 
connection.end(); 
} 

function request_handler(){ 
do_queries(
    function(err, result){ 
     if(err) throw err; 
     data = JSON.stringify(result); 
     data = JSON.parse(data); 
     console.log(data); 
    } 
); 
} 
request_handler(); 
console.log(data); 

第一的console.log(數據)被返回的對象, 但一個在端返回的值未定義

Manishs-MacBook-Air:Models manishbaghel$ node db_model.js 
undefined 
[ { id: 1, name: 'John', address: 'Highway 71' }, 
    { id: 2, name: 'Peter', address: 'Lowstreet 4' }, 
    { id: 3, name: 'Amy', address: 'Apple st 652' }, 
    { id: 4, name: 'Hannah', address: 'Mountain 21' }, 
    { id: 5, name: 'Michael', address: 'Valley 345' }, 
    { id: 6, name: 'Sandy', address: 'Ocean blvd 2' }, 
    { id: 7, name: 'Betty', address: 'Green Grass 1' }, 
    { id: 8, name: 'Richard', address: 'Sky st 331' }, 
    { id: 9, name: 'Susan', address: 'One way 98' }, 
] 
+1

當您定義'data'時,會導致它被設置爲鍵入'undefined'。其餘部分是nodejs的'async'性質 –

+0

那麼我該如何檢索數據 –

回答

0

參數callback(功能)傳遞給do_queries執行一個單獨的線程(即異步地)。所以,這是發生了什麼:

  1. 線程1調用do_queries,這又產生一個新的線程(比如線程2)
  2. 線程1調用request_handler
  3. 線程1調用console.log
  4. 線程2個品牌db調用並返回回調函數

但是,順序不會完全相同,因爲兩個操作都是彼此獨立且異步執行的,不保證data將在調用最後的console.log之前分配任何值。因此,你得到undefined

此外,不建議從回調函數更新/更改全局變量,因此您可能需要更改邏輯並將更新移至回調函數。

+0

現在,你會建議如何檢索數據 –

+0

你需要在'do_queries'的回調函數中寫入邏輯。你爲什麼需要從外面訪問它? –