我是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);
});
});
});
答案 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();