[英]Retrieving data from MySQL using Nodejs
我是javascript和nodeJS的新手。
我在嘗試運行SQL查詢以使用Nodejs檢索數據時遇到了一些麻煩。
我創建了一個連接模塊(db.js),但是無法從執行controller.js中獲得結果。
我可以肯定的是,如果我將resolve(connection)交換到查詢中,那么我就設法從DB檢索數據,因此連接模塊運行良好。
請幫助我看看我哪里出錯了。
這是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);
});
});
});
如果您的代碼如上所述,則運行時將看不見任何內容
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();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.