NodeJS ssh2 以前的命令持续存在

问题描述

我正在使用带有 express js 的 ssh2 库。客户端向 express api 发送 POST 请求,然后它应该创建一些文件,然后使用 ssh2 将文件一个目录复制到另一个目录,最终将对该文件执行另一个 shell 命令。

但是,我遇到了仅复制副本的问题。发出请求时,文件会在文件名中增加它们的编号,但是 ssh2 继续一次又一次地发送以前的文件

Jul 21 07:13 roi00754.edi
Jul 21 07:13 roi00755.edi
Jul 21 07:13 roi00757.edi
Jul 21 07:13 roi00756.edi
Jul 21 07:13 roi00758.edi
Jul 21 07:13 roi00760.edi
Jul 21 07:13 roi00759.edi
Jul 21 07:13 roi00761.edi


                ssh.on('ready',() => {
                    console.log('Client :: ready');
                    ssh.exec(
                        `
                        cp ${conf.remote_rollcreate_dir_full}${rollcreate_ord_filename} ${remote_edi_ord_dir_full}${edi_ord_filename}\n
                        `,(err,stream) => {
                            if (err) throw err;
                            stream.on('close',(code,signal) => {
                                console.log('Stream :: close :: code: ' + code + ',signal: ' + signal);
                                ssh.end();
                            })
                            stream.on('data',(data) => {
                                console.log('STDOUT: ' + data);
                            }).stderr.on('data',(data) => {
                                console.log('STDERR: ' + data);
                            });
                            stream.end(`exit\n`)
                        }
                    );
                }).connect(ssh_config);

在执行下一个命令之前如何让它完全关闭连接有什么想法吗?

解决方法

解决方案似乎使用 .once('ready' ... 而不是 .on('ready' ...

https://github.com/mscdex/ssh2/issues/717