Node.js script.runInContext() 方法
script.runInContext()方法用于运行已编译的代码,该代码存在于所述contextifiedObject内的vm.Script对象中并返回输出。但是,正在运行的代码无法访问本地范围。
句法:
script.runInContext( contextifiedObject, options )
参数:此方法接受上面提到的两个参数,如下所述:
- contextifiedObject:它是由 vm.createContext() 方法返回的上下文对象。
- options:可选参数,返回对象。它包含以下参数:
- displayErrors:如果在编译代码时抛出错误,则它保存一个布尔值,即 true,并且抛出错误的代码行链接到堆栈跟踪。它的默认值为 true。
- timeout:它保存一个整数值,指定在结束执行之前执行所述代码所花费的毫秒数。但是,如果关闭执行,则会发生错误。并且这个值绝对必须是一个正整数。
- breakOnSigint:它拥有一个布尔值。如果它为真,那么一旦提供SIGINT即 (Ctrl+C) 就会停止执行,如果停止执行,则会引发错误。它的默认值为 false。
返回值:它返回脚本中执行的最后一条语句的结果。
下面的例子说明了 Node.js 中script.runInContext() 方法的使用:
示例 1:
// Node.js program to demonstrate the
// script.runInContext() method
// Including util and vm module
const util = require('util');
const vm = require('vm');
// Constructing context
const contextobj = {
name: 'Nidhi',
articles: 60
};
// Constructing script
const script = new vm.Script('articles *= 10;');
// Contextifying object
vm.createContext(contextobj);
// Calling runInContext method
script.runInContext(contextobj);
// Displays output
console.log(contextobj);
输出:
{ name: 'Nidhi', articles: 600 }
在这里,文章是 600 为 (60*10 = 600)。
示例 2:
// Node.js program to demonstrate the
// script.runInContext() method
// Including util and vm module
const util = require('util');
const vm = require('vm');
// Constructing context
const contextobj = { globalVar: 6 };
// Constructing script
const script = new vm.Script('globalVar += 12;');
// Contextifying object
vm.createContext(contextobj);
// Calling for loop
for (let i = 1; i < 4; i++) {
// Calling runInContext method
script.runInContext(contextobj);
}
// Displays output
console.log("The output is: ", contextobj);
输出:
The output is: { globalVar: 42 }
参考: https://nodejs.org/api/vm.html#vm_script_runincontext_contextifiedobject_options