我有一个查询数据库并返回结果的函数。无论我返回什么,它都是未定义的。
服务器代码:我在这里调用我的函数
var express = require('express');
var DBmodule = require('./db.js');
var router = express.Router();
router.get('/topics', function(req,res){
res.send(DBmodule.getTopics()); //Call to db.js - This returns undefined
});
db.js代码
var mysql = require('..\\node_modules\\mysql');
var connection = mysql.createConnection({
host : 'localhost',
user : 'root',
password : 'password'
});
exports.getTopics = function(){
connection.connect();
connection.query('USE db');
var strQuery = "SELECT * FROM topics";
connection.query(strQuery, function(err, rows){
if(err){
throw err;
}else{
return rows;
}
});
connection.end();
};
让我感到困惑的是,如果我在getTopics函数中调用了console.log行,我会得到正确的结果。但是在服务器代码中,我得到的都是未定义的。
从我的搜索中我发现它可能会有一些回调要做,但无论如何我无法让它工作。有什么建议吗?
答案 0 :(得分:4)
您无法使用async
函数返回,只需将rows
传递给回调:
exports.getTopics = function(cb) {
connection.connect();
connection.query('USE db');
var strQuery = "SELECT * FROM topics";
connection.query(strQuery, function(err, rows){
if (err) {
throw err;
} else {
cb(rows);
}
});
connection.end();
};
DBmodule.getTopics(function(rows){
console.log(rows);
});
答案 1 :(得分:-1)
正如特雷斯丁所说,回调应该是解决方案。我发现这个ORM用于Node,它适用于许多sql数据库: