2017-09-07 176 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'的回调函数中写入逻辑。你为什么需要从外面访问它? –