我试图从我的数据库中获取数据并在我的应用程序的不同模块中使用它。我的应用程序分为许多模块,我需要它们。
我的connectDB.js模块看起来像这样
i
我希望只需要这个模块然后做一些像
这样的事情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
}
但由于某种原因,返回值总是"未定义"
在connectDB模块内发送查询按预期工作,返回正确的数据。但我无法使用我的函数来获取数据。
我的逻辑在这里有什么问题吗?你能帮我做错吗?
答案 0 :(得分: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
});
答案 1 :(得分: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);
});