Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何使用ssh2 sftp客户端fastGet下载多个文件?_Node.js_Ssh2 Sftp Client - Fatal编程技术网

Node.js 如何使用ssh2 sftp客户端fastGet下载多个文件?

Node.js 如何使用ssh2 sftp客户端fastGet下载多个文件?,node.js,ssh2-sftp-client,Node.js,Ssh2 Sftp Client,如何使用fastGet下载多个txt文件?我的代码如下: const Client = require('ssh2-sftp-client'); const sftp = new Client(); sftp.connect(configs) .then(() => { return sftp.list('.'); }) .then(files => { files.forEach(file => {

如何使用fastGet下载多个txt文件?我的代码如下:

const Client = require('ssh2-sftp-client');
const sftp = new Client();

sftp.connect(configs)
    .then(() => {
        return sftp.list('.');
    })
    .then(files => {
        files.forEach(file => {
            if(file.name.match(/txt$/)){
                const remoteFile = // remote file dir path
                const localFile = // local file dir path
                sftp.fastGet(remoteFile, localFile).catch(err => console.log(err));
            }
        });
    })
    .catch(err => console.log(err))
    .finally(() => {
        sftp.end();
    });


我一直收到一个无sftp连接可用的错误。我很确定我在使用sftp.fastGet时犯了一些错误,但不知道从何处开始。

您的代码中似乎存在多个问题:

  • 通过文件的
    循环应该在第一个
    块中执行,然后在
    块本身中执行
  • sftp.fastGet
    返回一个承诺,因此它是一个
    异步
    操作,在
    forEach
    循环中执行
    异步
    操作不是一个好主意
  • 我建议您使用以下更改更新代码:

    sftp.connect(configs)
        .then(async () => {
            const files = await sftp.list('.');
    
            for(const file in files){
              if(file.name.match(/txt$/)){
                const remoteFile = // remote file dir path
                const localFile = // local file dir path
                try {
                  await sftp.fastGet(remoteFile, localFile)
                }
                catch(err) { 
                  console.log(err))
                };
              } 
            }
        })
        .catch(err => console.log(err))
        .finally(() => {
            sftp.end();
        });