簡體   English   中英

使用 mysql node.js 驅動程序以 JSON 格式獲取整個數據庫

[英]Using mysql node.js driver to get an entire database as JSON

我正在創建一個 JavaScript 文件,以獲取在服務器端運行的整個 MySQL 數據庫的 JSON 轉儲。 我發現並正在使用用於 node.js ( https://www.npmjs.com/package/mysql ) 的 MySQL 驅動程序進行查詢,它已經足夠直接開始。 我的問題是我需要調用多個查詢並從所有查詢中獲取結果以放入單個 JSON 文件中,但我無法讓它正常工作。 我對 JavaScript 完全陌生(以前基本上從未接觸過它),所以這可能是一個相對簡單的解決方案,我只是缺少。

目前我查詢“SHOW TABLES”以獲取所有表的列表(這可能會改變,所以我不能只假設一個常量列表)。 然后,我只想基本上遍歷列表並為每個表調用“SELECT * from table_name”,將結果組合起來以獲得一個大的 JSON。 不幸的是,在嘗試組合它們之前,我還沒有弄清楚如何讓代碼完成所有查詢,從而為所有結果重新調整“未定義”。 這是我目前擁有的:

var mysql = require('mysql');
var fs = require('fs');

var connection = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: 'pass',
    database: 'test_data'
});

connection.connect();

connection.query('SHOW TABLES;', function(err, results, fields)
{
    if(err) throw err;

    var name = fields[0].name;
    var database_json = get_table(results[0][name]);
    for (i = 1; i < results.length; i++)
    {
        var table_name = results[i][name];
        var table_json = get_table(table_name);
        database_json = database_table_json.concat(table_json);
    }
    fs.writeFile('test_data.json', JSON.stringify(database_json), function (err)
    {
        if (err) throw err;
    });
    connection.end();
});

function get_table(table_name)
{
    connection.query('select * from ' + table_name + ';', function(err, results, fields) {
        if(err) throw err;

        return results;
    });
}

這將獲取表列表並毫無問題地遍歷所有內容,如果我只是在查詢中執行 console.log(results) ,則第二個查詢返回的信息是正確的,但是 for 循環只會在任何查詢之前繼續運行已完成,因此“table_json”最終只是“未定義”。 我真的認為這一定是一個簡單的解決方案(可能是一些我還不太完全理解的回調),但我一直在磕磕絆絆。

謝謝您的幫助。

我猜這是用於某種維護類型的功能,而不是您的應用程序所需的部分。 異步執行此操作可能是安全的。 該模塊可在此處獲得: https : //github.com/caolan/async

您還可以使用 Q 承諾,可在此處獲得: https : //github.com/kriskowal/q

這個答案:很好地描述了這兩種方法: Simplest way to wait some asynchronous tasks complete, in Javascript?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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