node.js - 无法更改 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;
}
代码工作得很好,文件正在上传,但我有几个问题需要帮助,
我不能在 sftp.connect 中使用 context.log() 吗?知道为什么吗?使用 console.log() 可以正常工作,但是在执行日志完成后会打印这些日志。
当我试图访问 .then() 和 .catch() 之外的状态时,它是未定义的。在同一个函数中,如果我使用 console.log() 打印 - 它以 0 形式出现,而 context.log() 以未定义形式出现。
这里的任何帮助将不胜感激。我不确定发生了什么,尝试了各种方法,但似乎效果不佳,我的目标是在状态变量的帮助下处理成功和失败的情况,以便可以将相同的状态返回给用户提及操作是否成功。
提前致谢。
解决方案
推荐阅读
- c# - 自定义属性的行为不像数据注释
- python - authenticate() 未使用自定义身份验证后端运行
- python-3.x - 创建 Python 函数以在组中查找任何 NULL 值
- javascript - JS - 从查找助手返回一个字符串
- swift - CIFIlter 是否可以在 watch os 6 中生成 QR 码
- r - 在文本中查找关键字并附加关键字主题
- shell - 在带有包含路径的变量的 shell 脚本中使用 cd 命令在 Windows 10 主机的 CentOS virtualbox 环境中不起作用
- python-3.x - 使用 try 循环检查输入是否为 int 的万无一失
- php - 用正则表达式搜索字符串中的子字符串,获取值然后替换它
- excel - 如何使用 VBA 在循环中更改图表标题字体大小?