Javascript 返回mysql查询的结果。最终返回未定义的值

Javascript 返回mysql查询的结果。最终返回未定义的值,javascript,mysql,node.js,Javascript,Mysql,Node.js,我有一个查询数据库并返回结果的函数。不管我返回什么,它都是未定义的 服务器代码:我在这里调用我的函数 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 - Thi

我有一个查询数据库并返回结果的函数。不管我返回什么,它都是未定义的

服务器代码:我在这里调用我的函数

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 rowsw,我会得到正确的结果。但是在服务器代码中,我得到的是未定义的


从我的搜索中,我想它可能需要回调,但无论如何我都无法让它工作。有什么建议吗?

您不能在
异步
函数中返回,只需将
传递给回调:

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);
});

您不能在
异步
函数中返回,只需将
传递给回调:

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);
});

您不能在
异步
函数中返回,只需将
传递给回调:

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);
});

您不能在
异步
函数中返回,只需将
传递给回调:

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);
});

正如Tresdin所说,回调应该是解决方案。我发现此ORM适用于节点,它适用于许多sql数据库:


正如特雷斯丁所说,回调应该是解决方案。我发现此ORM适用于节点,它适用于许多sql数据库:


正如特雷斯丁所说,回调应该是解决方案。我发现此ORM适用于节点,它适用于许多sql数据库:


正如特雷斯丁所说,回调应该是解决方案。我发现此ORM适用于节点,它适用于许多sql数据库:



exports.getTopics=函数(res)然后res.rows;exports.getTopics=函数(res),然后res.rows;exports.getTopics=函数(res),然后res.rows;exports.getTopics=函数(res),然后res.rows;非常感谢!我之前也试过类似的方法,但效果很好!!!谢谢!!有趣的是,难道不能向函数getTopics()添加另一个参数吗?我正在尝试创建一个类似的方法并传递topicID,尽管我无法访问id。为什么不可能呢?很抱歉,它确实起作用了,只是我在function()内部而不是外部键入了参数:pThanks alot!我之前也试过类似的方法,但效果很好!!!谢谢!!有趣的是,难道不能向函数getTopics()添加另一个参数吗?我正在尝试创建一个类似的方法并传递topicID,尽管我无法访问id。为什么不可能呢?很抱歉,它确实起作用了,只是我在function()内部而不是外部键入了参数:pThanks alot!我之前也试过类似的方法,但效果很好!!!谢谢!!有趣的是,难道不能向函数getTopics()添加另一个参数吗?我正在尝试创建一个类似的方法并传递topicID,尽管我无法访问id。为什么不可能呢?很抱歉,它确实起作用了,只是我在function()内部而不是外部键入了参数:pThanks alot!我之前也试过类似的方法,但效果很好!!!谢谢!!有趣的是,难道不能向函数getTopics()添加另一个参数吗?我正在尝试创建一个类似的方法并传递topicID,尽管我无法访问id。为什么不可能?很抱歉,它确实起作用了,只是我在函数()内部而不是外部键入了参数:p这不是问题的真正答案,而是注释的提示。哦,抱歉,我是新来的:)谢谢tipThats不是问题的真正答案,但更多的是评论。哦,对不起,我是新来的:)谢谢tipThats不是问题的真正答案,但更多的是评论。哦,对不起,我是新来的:)谢谢tipThats不是问题的真正答案,但更多的评论提示。哦,对不起,我是新手:)谢谢你的提示