2013-12-15 64 views
0

模塊總是返回null我是node.js的新手,並想知道爲什麼我的代碼總是返回null。無論如何

我已經db.js

exports.getItems = function(){ 
    var conn = mysql.createConnection(); 
    conn.connect(); 

    conn.query("Select * From Items", function(err, rows, fields) { 
     if (err) throw err; 
     conn.end(); 
     return rows; 
    }); 
}; 

和模塊稱爲這樣的:

var db = require('../db.js'); 
exports.items = function(req, res){ 
    var data = db.getItems(); 
    console.log('second', data); 
    res.end(data); 
}; 

和路線:

app.get('/api/items', api.items); 

的的console.log( '第二')總是「第二個未定義」。我已驗證該查詢是行中的返回項目。

請指教。

回答

0

經典異步問題。

getItems將在數據庫查詢完成之前返回。來自數據庫的數據在回調函數中返回,而不是函數本身。

當你寫:

var data = db.getItems(); 
console.log('second', data); 
res.end(data); 

dataundefined,因爲你沒有內部getItems一個return聲明!因此按照JavaScript規則,getItems返回undefined。

你需要的是像(和請理解我沒有測試過這一點)是:

exports.items = function(req, res){ 
    var conn = mysql.createConnection(); 
    conn.connect(); 
    conn.query("Select * From Items", function(err, rows, fields) { 
    conn.end(); 
    if (err) throw err; 
    res.end(rows); 
    }); 
} 

看到各種網站在線乾淨管理連接。但是,這應該足以讓你明白,響應應該從query的回調中發出,這是數據實際可用的地方。

+0

我將代碼更改爲以下內容,但我一直在獲取資源未定義! – jmogera

+0

「TypeError:無法調用未定義的方法'json'精確地爲 – jmogera

+0

嘗試將'rows'的值作爲查詢回調的第一行。 –