首页 > 解决方案 > 无法更改 nodejs 中 sftp 客户端的 .then() 和 .catch() 中的局部变量 | 天蓝色的功能

问题描述

我需要通过 azure 函数将文件上传到 sftp 服务器。我正在使用'ssh2-sftp-client'。我有我的 index.js,其中正在调用上传函数,并且正在将相关详细信息作为参数发送。

下面是我的上传功能。

    function upload(context,host,port,username,folder,dataStream,fileName,encodedPrvKey) {
    
    let privateKeyBuffer=Buffer.from(encodedPrvKey,'base64')
    let privateKeyString=privateKeyBuffer.toString();
        
    const config = {
        host: host,
        port: port,
        username: username,
        privateKey: privateKeyString
    };
    
    let sftp = new Client;
    let remote = folder+'/'+fileName;
 
    var status=0;
    context.log('starting sftp')
    
    sftp.connect(config)
        .then(() => {
            
            console.log('connected')
            console.log('uploaded file successfully')
            return sftp.put(dataStream, remote);
        })
        .then(() => {
            return sftp.list(folder)
            
        }).then((data)=>{
            status=200;
            console.log(data)
        })
        .then(()=>{
            return sftp.end();
        })
        .catch(err => {
            status=500;
            console.error('Error occured during SFTP upload')
            console.error(err)
           
    });
context.log('status--'+status)//this returns undefined
console.log('status--'+status)//this returns 0
return status;
}

代码工作得很好,文件正在上传,但我有几个问题需要帮助,

  1. 我不能在 sftp.connect 中使用 context.log() 吗?知道为什么吗?使用 console.log() 可以正常工作,但是在执行日志完成后会打印这些日志。

  2. 当我试图访问 .then() 和 .catch() 之外的状态时,它是未定义的。在同一个函数中,如果我使用 console.log() 打印 - 它以 0 形式出现,而 context.log() 以未定义形式出现。

这里的任何帮助将不胜感激。我不确定发生了什么,尝试了各种方法,但似乎效果不佳,我的目标是在状态变量的帮助下处理成功和失败的情况,以便可以将相同的状态返回给用户提及操作是否成功。

提前致谢。

标签: node.jsazurevariablesuploadsftp

解决方案


推荐阅读