[英]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.