【问题标题】:Returning the results of an mysql-query. Ends up returning undefined返回 mysql 查询的结果。最终返回未定义
【发布时间】:2015-05-09 19:49:21
【问题描述】:

我有一个函数可以查询我的数据库并返回结果。但是无论我返回什么,它都是未定义的。

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

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

从我的搜索中,我认为它可能有一些回调要做,但无论如何我无法让它工作。有什么建议吗?

【问题讨论】:

  • exports.getTopics = function ( res) then res.rows;

标签: javascript mysql node.js


【解决方案1】:

您不能在 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);
});

【讨论】:

  • 非常感谢!我之前尝试过类似的东西,但效果很好!!!谢谢谢谢!
  • 有趣的是,不能在函数 getTopics() 中添加另一个参数吗?我正在尝试创建一个类似的方法并传递 topicID,尽管我无法访问该 ID。
  • 为什么不可能?
  • 对不起,它确实有效,只是我在 function() 内部而不是在外部输入了参数:p
【解决方案2】:

正如 Tresdin 所说,回调应该是解决方案。我为 Node 找到了这个 ORM,它适用于许多 sql 数据库:

http://docs.sequelizejs.com/en/latest/

【讨论】:

  • 这不是问题的真正答案,但更多的是给 cmets 的提示。
  • 哦,对不起,我是新手 :) 感谢您的提示
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-25
  • 1970-01-01
  • 2013-08-24
  • 2013-11-07
  • 1970-01-01
相关资源
最近更新 更多