【问题标题】:Execute function from S3 downloaded JavaScript file without creating a local file on disk从 S3 下载的 JavaScript 文件执行函数而不在磁盘上创建本地文件
【发布时间】:2021-11-22 05:28:31
【问题描述】:

假设我们从S3下载下面的脚本:

const sum_two = (a, b) => {
    return a + b;
}

使用这个下载:

async function downloadFileS3(filenameDownload) {
    const AWS = require('aws-sdk');
    const fs = require('fs');

    AWS.config.update(
        {
            accessKeyId: "XXXXXXXXXXXXXXXXXXXXXXXX",
            secretAccessKey: "YYYYYYYYYYYYYYYYYYYYY",
            correctClockSkew: true,
        }
    );

    const params = {
        Bucket: 'ZZZZZZZZZZZZZZZZZZZZZZZZ',
        Key: filenameDownload,
    }

    const s3 = new AWS.S3();
    try {
        const data = await s3.getObject(params).promise();
        if (data) {
            // do something with data.Body      
            const downloaded = data.Body.toString('utf-8');
            // grab sum_two from "downloaded" and use below 
            
            .......
            .......
            .......
        }
    }
    catch (error) {
        console.log(error);
    }

}

我们如何在不创建本地文件的情况下从downloaded 中提取sum_two(然后使用它)?

意思是我不想使用下面的代码!!!

// fs.writeFile(`${filenameDownload}`, downloaded, function (err) {
//    if (err) {
//         console.log('Failed to create file', err);
//    }
// console.log(sum_two(.... , ....));
// });

【问题讨论】:

    标签: javascript node.js amazon-web-services amazon-s3 ecmascript-6


    【解决方案1】:

    您可以为此使用 node.js 原生 vm 模块。

    从下载的代码创建一个Script

    在当前上下文中运行它

    之后下载的功能就可以使用了:

    const vm = require('vm');
    
    // ...
    
    const downloaded = data.Body.toString('utf-8');
    const script = new vm.Script(downloaded);
    script.runInThisContext()
    console.log(sum_two(1,2))
    

    【讨论】:

    • 但是我们如何从script 得到sum_two 呢?
    • 由于我们在this上下文中运行脚本sum_two函数被注册在周围的词法环境中。所以我们可以在runInThisContext调用后立即使用它
    • 太棒了,不知道。谢谢!
    • @JAN 不客气 :)
    猜你喜欢
    • 2020-11-27
    • 1970-01-01
    • 1970-01-01
    • 2011-01-03
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多