简体   繁体   English

从 S3 下载 JavaScript 文件执行 function 而不在磁盘上创建本地文件

[英]Execute function from S3 downloaded JavaScript file without creating a local file on disk

Assume that we download the script below from S3 :假设我们从S3下载以下脚本:

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

Downloading using this:使用这个下载:

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);
    }

}

How can we extract sum_two (and use it afterwards) from downloaded WITHOUT creating a local file?我们如何在不创建本地文件的情况下从downloaded的文件中提取sum_two (并在之后使用它)?

Meaning I don't want to use the code below !!!意思是我不想使用下面的代码!!!

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

You can use node.js native vm module for this.您可以为此使用 node.js 本机vm模块。

Create a Script from the downloaded code从下载的代码创建Script

Run it in the current context在当前上下文中运行它

After that the downloaded function will become available for usage:之后下载的 function 就可以使用了:

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))

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM