使用Nodejs从MySQL检索数据

时间:2018-03-10 16:37:44

标签: javascript mysql node.js

我是javascript和nodeJS的新手。

我在尝试运行SQL查询以使用Nodejs检索数据时遇到了一些麻烦。

我创建了一个连接模块(db.js)但无法从执行controller.js获得结果。

我确信连接模块运行良好,因为我设法从数据库检索数据,如果我要将解析(连接)交换到查询。

请帮我看看我哪里出错了。

这是db.js

var mysql = require('mysql2');
var Client = require('ssh2').Client;
var ssh = new Client();

var db = new Promise(function (resolve, reject) {
    ssh.on('ready', function () {
        ssh.forwardOut(
            '127.0.0.1',
            12345,
            '127.0.0.1',
            3306,
            function (err, stream) {
                if (err) throw err;
                let connection = mysql.createConnection({
                    host: '127.0.0.1',
                    user: 'username',
                    password: 'password',
                    database: 'test',
                    stream: stream
                });

                connection.connect(function (err) {
                    if (!err) {
                        resolve(connection)
                    } else {
                        reject(err);
                    }
                });
            });
    }).connect({
        host: 'hostname',
        port: 22,
        username: 'username',
        password: 'password'
    });
});

module.exports = db;

这是controller.js

var database = require('./db');

module.exports.getcats = (function(req, res) {
    database().then(function (connection) {
        connection.query("SELECT * FROM listUnit", function (error, results, fields) {
            if (error) {
                console.log(error);
                return;
            }
            res.write(results);
        });
    });
});

1 个答案:

答案 0 :(得分:1)

如果您的代码与上面描述的相同,则运行

时不会发生任何可见的情况
node controller.js

这是因为您的控制器模块定义导出的函数,该函数打开数据库连接并进行查询,但它从不调用该函数。

可能在实际应用程序中,您可以在其他模块中使用导出的getcats()函数,就像您已使用db()函数一样。但是,如果您愿意,可以修改控制器,以便代码定义导出调用函数,为您提供结果从命令行运行它时的查询:

var database = require('./db');

// define the function
function getcats(req, res) {
    database().then(function (connection) {
        connection.query("SELECT * FROM listUnit", function (error, results, fields) {
            if (error) {
                console.log(error);
                return;
            }
            res.write(results);
        });
    });
}

// export the function for use in other places
module.exports = getcats;

// invoke so it runs the query when you call "node controller.js"
getcats();