最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

通过FTP在Node和AWS Lambda中使用Async&Promises下载txt文件

IT培训 admin 8浏览 0评论

通过FTP在Node和AWS Lambda中使用Async&Promises下载txt文件

我使用单个节点模块basic-ftp下载AWS Lambda中的txt文件,并将其放在Lambda函数中的/ tmp /目录中。

然后我想使用FTP函数之外的txt文件及其内容。

我正在使用Async和Promises,并且在代码中有点丢失。 AWS Lambda中返回的当前错误是

module initialization error: ReferenceError
      await finalData = (() => {
      ^^^^^^^^^^^^^^^

由此线await finalData = (() => {产生

任何人都可以帮助解决这个问题并帮助我访问FTP功能之外的finalData吗?

var fs = require('fs');
var ftp = require("basic-ftp");
var path = require('path');

exports.handler = async (event, context, callback) => {

var fullPath = event.line_items[0].meta_data[2].value.tmp_name; // File path on Linux server -------
var myFileNameWithExtension = path.basename(fullPath); // Uploaded filename with the file extension eg. filename.txt

// FTP Function - Download from FTP and write to /tmp/ within AWS Lambda function
example()
//example().then(finalData=> callback(finalData))

async function example() {
    var finalData = '';

    const client = new ftp.Client()
    client.ftp.verbose = true
    try {
    await client.access({
        host: "XXXX",
        user: "XXXX",
        password: "XXXX",
    })

    let writeStream = fs.createWriteStream('/tmp/' + myFileNameWithExtension);
    await client.download(writeStream, myFileNameWithExtension)

    await finalData = (() => {
        return new Promise((resolve, reject) => {

        writeStream
            .on('finish', () => {
            fs.readFile("/tmp/" + myFileNameWithExtension, function (err, data) {
                if (err) {
                reject(err)
                } else {
                console.log('Contents of AWS Lambda /tmp/ directory', data);
                resolve(data);
                }
            });
            })
            .on('error', (err) => {
            console.log(err);
            reject(err);
            })
        })
    })();
    }
    catch (err) {
    console.log(err)
    }
    client.close();
    return finalData;
}

// Output contents of downloaded txt file into console and use in later code outside of the FTP function
console.log("Raw text:\n" + finalData.Body.toString('ascii'));

};
回答如下:

finalData仅在返回它的示例中定义,但您不会将其分配给任何内容。结合Luca Kiebel的评论,尝试添加

const finalData = await example();

然后记录下来。

因为finalData是在函数示例中定义的,所以它仅在该函数和该函数中定义的任何函数中可用。

You Don't Know JS比我能更好地解释这一点

通过FTP在Node和AWS Lambda中使用Async&Promises下载txt文件

我使用单个节点模块basic-ftp下载AWS Lambda中的txt文件,并将其放在Lambda函数中的/ tmp /目录中。

然后我想使用FTP函数之外的txt文件及其内容。

我正在使用Async和Promises,并且在代码中有点丢失。 AWS Lambda中返回的当前错误是

module initialization error: ReferenceError
      await finalData = (() => {
      ^^^^^^^^^^^^^^^

由此线await finalData = (() => {产生

任何人都可以帮助解决这个问题并帮助我访问FTP功能之外的finalData吗?

var fs = require('fs');
var ftp = require("basic-ftp");
var path = require('path');

exports.handler = async (event, context, callback) => {

var fullPath = event.line_items[0].meta_data[2].value.tmp_name; // File path on Linux server -------
var myFileNameWithExtension = path.basename(fullPath); // Uploaded filename with the file extension eg. filename.txt

// FTP Function - Download from FTP and write to /tmp/ within AWS Lambda function
example()
//example().then(finalData=> callback(finalData))

async function example() {
    var finalData = '';

    const client = new ftp.Client()
    client.ftp.verbose = true
    try {
    await client.access({
        host: "XXXX",
        user: "XXXX",
        password: "XXXX",
    })

    let writeStream = fs.createWriteStream('/tmp/' + myFileNameWithExtension);
    await client.download(writeStream, myFileNameWithExtension)

    await finalData = (() => {
        return new Promise((resolve, reject) => {

        writeStream
            .on('finish', () => {
            fs.readFile("/tmp/" + myFileNameWithExtension, function (err, data) {
                if (err) {
                reject(err)
                } else {
                console.log('Contents of AWS Lambda /tmp/ directory', data);
                resolve(data);
                }
            });
            })
            .on('error', (err) => {
            console.log(err);
            reject(err);
            })
        })
    })();
    }
    catch (err) {
    console.log(err)
    }
    client.close();
    return finalData;
}

// Output contents of downloaded txt file into console and use in later code outside of the FTP function
console.log("Raw text:\n" + finalData.Body.toString('ascii'));

};
回答如下:

finalData仅在返回它的示例中定义,但您不会将其分配给任何内容。结合Luca Kiebel的评论,尝试添加

const finalData = await example();

然后记录下来。

因为finalData是在函数示例中定义的,所以它仅在该函数和该函数中定义的任何函数中可用。

You Don't Know JS比我能更好地解释这一点

发布评论

评论列表 (0)

  1. 暂无评论