簡體   English   中英

使用Node.js從MySQL檢索數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM