我希望我能就为什么我的 nodejs 程序的行为方式得到一些建议。
我正在使用两个模块,node-sftp 和 node-inotify。我已经设置 node-inotify 来监视目录并在其中写入内容时调用函数,该函数是 sftp 上传。
现在我遇到的问题是一次处理一个文件很好,但是当我一次将 4 个文件放到那里时,该函数被调用了四次,但只有一个 sftp 上传通过。
我是否需要以特定方式订购我的代码以确保 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');
});
});
};