簡體   English   中英

Node.js 將 Buffer 轉換為對象/函數

[英]Node.js convert Buffer to object/function

fs.readFile()fs.readFileSync()以及Amazon S3返回一個Buffer對象。 如何將此緩沖區用作可以執行的實際 JavaScript 代碼?

這是一個非常基本的例子。

some-file.js:

module.exports = function () {
    console.log('hello');
};

主文件

const data1 = fs.readFileSync('./some-file.js'); // This is a Buffer
const data2 = fs.readFileSync('./some-file.js', 'utf-8'); // This is a string

data1(); // Error: data1 is not a function
JSON.parse(data2)(); // Error: data2 is no valid JSON

聽起來你在為函數場景尋找類似eval 的東西(不是邪惡的版本,這個版本利用了vm 模塊)。 這里的另一個選項是將緩沖區的內容保存到一個文件中,然后讓require來做這件事(不確定這是否適合你)。

對象場景更簡單,如果Buffer是一個 JSON 字符串,那么您應該可以簡單地調用JSON.parse(buffer.toString('utf8'))

如果你想執行 javascript 代碼,而不是使用eval ,這可能是一個相當大的安全風險,你應該使用內置模塊vm

const vm = require('vm');

const sandbox = { x: 2 }; // pass variables or some context if you want
vm.createContext(sandbox); // Contextify the sandbox.

const code = buffer.toString(); // your buffer
vm.runInContext(code, sandbox);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM