0

私のnodejsプログラムがこのように動作している理由について、アドバイスが得られることを望んでいました。

node-sftp と node-inotify の 2 つのモジュールを使用しています。ディレクトリを監視し、そこに何かが書き込まれたときに関数を呼び出すように node-inotify をセットアップしました。関数は sftp アップロードです。

今私が抱えている問題は、一度に1つのファイルを処理しても問題ないということですが、一度に4つのファイルをドロップすると、関数は4回呼び出されますが、sftpアップロードは1回しか行われません。

sftpアップロードがx回発生するように特定の方法でコードを注文する必要がありますか?これはおそらく閉鎖と関係がありますか?

これは私のコードの基本的なバージョンです...

  • 「監視対象」ディレクトリで何かが発生すると、「event_handler」が呼び出されます
  • 「check_event」は、このタイプのイベントが必要かどうかを判断します。この場合は「書き込み」です。
  • 「ftp_to_server」は接続の詳細を準備します
  • 「do_ftp」は基本的にnode-sftpモジュールを使用してsftpアップロードを実行します

    event_handler = function(event){
        var supplier;
        check_event(event, supplier, type, ftp_to_server);
    };
    

=================

    function check_event(event, handler)
    {
        if (event.type === 'xxxxxx') {
            var file_to_process_name = 'abc';
            var file_to_process_dir = 'abc';
            var remote_dir = 'abc';
            handler(file_to_process_name, file_to_process_dir, remote_dir);
        }
    }

    function ftp_to_server(file_to_process_name, file_to_process_dir, remote_dir) {
        var connection_details = conf.ftp.connections
        do_ftp(connection_details, file_to_process_name, file_to_process_dir, remote_dir);    
    }

    function do_ftp(connection_details, file_to_process_name, file_to_process_dir, remote_dir) {

        var credentials = {
            // FTP settings here
        };
        var local_file = file_to_process_dir + file_to_process_name;
        var remote_file = remote_dir + file_to_process_name;

        connection = new sftp(credentials, function(err) {
            if (err){
                throw err;
            }
            connection.writeFile(remote_file, fs.readFileSync(local_file, "utf8"), null, function(err) {
                if (err) {
                    throw err;
                }

                console.info('FTP PUT DONE');

            });
        });
    };
4

1 に答える 1

1

"connection = new sftp(credentials、function(err){"はvar connection = new sftp(credentials、function(err){

あなたが現在それをコーディングしている方法では、「接続」はグローバルであり、あなたはそれを上書きしています。

于 2012-10-29T19:23:02.787 に答える