ホームページ > データベース > mysql チュートリアル > Node.js を使用すると、ファイルの保存が成功したにもかかわらず、MySQL データベース ダンプが空のファイルになるのはなぜですか?

Node.js を使用すると、ファイルの保存が成功したにもかかわらず、MySQL データベース ダンプが空のファイルになるのはなぜですか?

Mary-Kate Olsen
リリース: 2024-11-04 03:41:02
オリジナル
822 人が閲覧しました

Why is my MySQL database dump using Node.js resulting in an empty file despite successful file saving?

Node.js を使用した MySQL データベースのダンプ

問題

MySQL データベースをダンプする cron スクリプトを作成しようとすると、空のファイルが生成されます。ファイルの保存に成功しました。ログの出力でも空の文字列が生成されます。

原因

この問題は、提供されたコード内のいくつかの問題に起因します:

  1. connection.connect による初期データベース接続の欠如()
  2. コールバック コードが connection.connect() コールバックの外側に配置され、実行が妨げられています
  3. SQL 呼び出しが完了する前に接続が早期に破棄されます
  4. バックアップ ファイルを間違ったコールバック (データ入力前)

解決策

次のコードはこれらの問題を修正し、機能する解決策を提供します。

var mysql_backup = function() {
    this.backup = '';
    this.mysql = require('mysql');

    this.init = function() {
        this.connection = this.mysql.createConnection({
            user: 'root',
            password: 'root',
            database: 'test'
        });

        // Connect to the database
        this.connection.connect(function(err) {
            if (err) console.log(err);
            db.get_tables(function() {});
        });
    };

    this.query = function(sql, callback) {
        this.connection.query(sql, function (error, results, fields) {
            if (error) {
                throw error;
            }
            if (results.length  > 0) {
                callback(results);
            }
        });
    };

    this.get_tables = function(callback){
        var counter = 0;
        var me = this;
        this.query('SHOW TABLES', function(tables) {
            for (table in tables) {
                counter++;
                me.query('SHOW CREATE TABLE ' + tables[table].Tables_in_test, function(r){
                    for (t in r) {
                        me.backup += "DROP TABLE " + r[t].Table + "\n\n";
                        me.backup += r[t]["Create Table"] + "\n\n";
                    }
                    counter--;
                    if (counter === 0) {
                        me.save_backup();
                        me.connection.destroy();
                    }
                });
            }
        });
    };

    this.save_backup = function() {
        var fs = require('fs');
        fs.writeFile("./backup_test.txt", this.backup, function(err) {
            if(err) {
                console.log(err);
            } else {
                console.log("The file was saved!");
            }
        });
    }

};

var db = new mysql_backup;
db.init();
ログイン後にコピー

追加メモ

わかりやすくするために、me の代わりに

  • self を使用することを検討してください
  • 構文内の for ... に対する数値の for ループ
  • 一貫したコールバック形式 (エラー、スタッフ)
  • エラー処理とコールバックのネスト管理の改善を約束します

以上がNode.js を使用すると、ファイルの保存が成功したにもかかわらず、MySQL データベース ダンプが空のファイルになるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート