2015-11-27 52 views
0

我試圖從我的數據庫中獲取數據並在我的應用程序的不同模塊中使用它。我的應用程序分爲很多模塊,我需要它們的地方。nodejs mysql使用其他模塊/文件中的數據

我connectDB.js模塊看起來像這樣

var mysql = require('mysql'); 

var db = mysql.createConnection({ 
    host: "localhost", 
    user: "root", 
    password: "pw", 
    database : "something" 
}); 

db.connect(function(err){ 
    if(err){ 
    console.log('Error connecting to Db'); 
    return; 
    } 
    console.log('Database connected'); 
}); 

function select(query) 
{ 
    db.query(query,function(err,rows){ 
     if(err) throw err; 
     return rows; 
    }); 
} 

module.exports = 
{ 
    select 
} 

我希望只是簡單地要求該模塊,然後做一個類似

db.select('SELECT * FROM users'); 

但由於某些原因的返回值始終是「undefined」

在connectDB模塊內部發送查詢按預期方式工作,返回正確的數據。但我不能用我的函數來獲取數據。

我的邏輯在這裏有什麼問題嗎?你能幫助我做錯什麼嗎?

回答

2

進行以下改變了代碼

module.exports = 
{ 
    select: select 
} 

你忘了回調函數

function select(query, callback) 
{ 
    db.query(query,function(err,rows){ 
     if(err) throw err; 
     return callback(rows); 
    }); 
} 

然後,你可以通過這樣的函數:

db.select('SELECT * FROM users', function(rows) { 
    // Do stuff with rows 
}); 
+0

沒有工作 – gempir

+0

我更新了我的答案 –

+0

我沒忘,我只是不知道我必須這樣做。謝謝。這個解決方案更乾淨,非常好 – gempir

2

我記得,connection.query將返回結果異步,所以你需要用回調或Promise包裝它。

var mysql = require('mysql'); 

function DB { 
var db = mysql.createConnection({ 
    host: "localhost", 
    user: "root", 
    password: "pw", 
    database : "something" 
}); 

db.connect(function(err){ 
    if(err){ 
    console.log('Error connecting to Db'); 
    return; 
    } 
    console.log('Database connected'); 
}); 

this.select = function(query, callback) { 
    db.query(query,function(err,rows){ 
     if(err) throw err; 
     callback(rows); 
    }); 
} 

//Promise version 
this.selectPromise = function(query) { 
    return new Promise(function(resolve, reject){ 
    db.query(query,function(err,rows){ 
     if(err) reject(err); 
     resolve(rows); 
    }); 
    }); 
} 
} 
module.exports = DB; 

如何使用:

var DB = require('your-module'); 

var db = new DB(); 

db.query('select * from table', function(result) { 
    console.log(result); 
}); 

db.selectPromise('select * from table').then(function(result) { 
    console.log(result); 
}); 
+0

這完美的作品!謝謝! – gempir