Node.js ssh2-sftp-client 错误:fastPut:本地服务器没有响应

问题描述 投票:0回答:1

我正在使用

node -v v14.17.0
"ssh2-sftp-client": "^7.0.0"
以及方法
fastPut
https://github.com/theophilusx/ssh2-sftp-client#sec-5-2-9

检查远程文件正常,因此连接正常。

我的环境是

wsl2 Ubuntu-20.04

我面临的问题是错误

RuntimeError: abort(Error: fastPut: No response from server Local: /home/draganddrop/testi.txt Remote: Downloads/testi.txt). Build with -s ASSERTIONS=1 for more info.
    at process.J (/home/draganddrop/node_modules/ssh2/lib/protocol/crypto/poly1305.js:20:53)
    at process.emit (events.js:376:20)
    at processPromiseRejections (internal/process/promises.js:245:33)
    at processTicksAndRejections (internal/process/task_queues.js:96:32)

我也尝试过使用控制台中的

sftp> put /home/draganddrop/testi.txt Downloads/testi.txt
,它有效。

我正在使用的代码:

        let Client = require('ssh2-sftp-client');
        let sftp = new Client();
    
        let remotePath = 'Downloads/testi.txt';
        let localPath = '/home/draganddrop/testi.txt'

        const config = {
          host: 'XX.XX.XXX.XXX',
          port: '22',
          username: 'XXXXX',
          password: 'XXXXXX'
        };

        sftp.connect(config)
        .then(() => {
          sftp.fastPut(localPath, remotePath);
          //return sftp.exists(remotePath);
        })
        //.then(data => {
        //  console.log(data);          // will be false or d, -, l (dir, file or link)
        //})
        .then(() => {
          sftp.end();
        })
        .catch(err => {
          console.error(err.message);
        });

我不知道是什么导致了这个错误,我尝试过不同的路径,但要么出现错误的路径错误,要么出现这个错误。可能是什么原因?

node.js ssh2 ssh2-sftp-client
1个回答
6
投票

问题的原因是连接在执行完成之前就关闭了

fastPut

您正在运行 connect,之后在第一个
.then
中,方法
fastPut
异步运行,它不会等待完成执行并返回 undefined 到链的下一个方法
.then

要解决这个问题,你只需要返回从
fastPut

收到的承诺
sftp.connect(config)
    .then(() => {
        // vvv
        return sftp.fastPut(localPath, remotePath)
    })
    .then((data) => {/* do something*/})
    .finally(() => sftp.end())
© www.soinside.com 2019 - 2024. All rights reserved.