nodejs mysql使用其他模块/文件中的数据
问题描述:
我试图从我的数据库中获取数据并在我的应用程序的不同模块中使用它。我的应用程序分为很多模块,我需要它们的地方。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模块内部发送查询按预期方式工作,返回正确的数据。但我不能用我的函数来获取数据。
我的逻辑在这里有什么问题吗?你能帮助我做错什么吗?
答
进行以下改变了代码
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
});
答
我记得,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
没有工作 – gempir
我更新了我的答案 –
我没忘,我只是不知道我必须这样做。谢谢。这个解决方案更干净,非常好 – gempir