Node.js script.runInNewContext() 方法
script.runInNewContext()方法首先对指定的 contextObject 进行上下文化,在创建的上下文中运行 vm.Script 对象内的编译代码,然后返回输出。但是,正在运行的代码无法访问本地范围。
句法:
script.runInNewContext( contextObject, options )
参数:此方法接受上面提到的两个参数,如下所述:
- contextObject:它是一个将被上下文化的对象,如果它未定义,则将创建一个新对象,
- options:它是可选的并返回Object 。
它包含以下参数:
- displayErrors:它保存一个布尔值,即如果在编译代码时抛出错误并且抛出错误的代码行链接到堆栈跟踪,则为 true。它的默认值为 true。
- timeout:它保存一个整数值,指定在结束执行之前执行所述代码所花费的毫秒数。但是,如果关闭执行,则会发生错误。并且这个值绝对必须是一个正整数。
- breakOnSigint:它保存一个布尔值。如果它为真,那么一旦提供了SIGINT即 (Ctrl+C),就会立即停止执行。如果执行停止,则会引发错误。它的默认值为 false。
- contextName:它包含一个字符串。它是新生成的上下文的人类可读名称。默认情况下,它是“VM 上下文 i”,其中i是生成的上下文的索引,它以数字递增。
- contextOrigin:它包含一个字符串。它是等价于最近生成的上下文的起源。此外,来源必须像 URL 一样形成。它的默认值为“。
- contextCodeGeneration:它是 Object 类型的。
它包含以下参数:- 字符串:它保存一个布尔值,如果它设置为 false ,那么任何对函数构造函数或 eval 的调用都会抛出一个错误,即EvalError 。它的默认值为真。
- wasm:它拥有一个布尔值,如果它设置为 false,那么任何编译 WebAssembly 模块的尝试都会抛出错误,即WebAssembly.CompileError 。它的默认值为 true。
返回值:它返回脚本中执行的最后一条语句的结果。
下面的例子说明了 Node.js 中script.runInNewContext() 方法的使用:
示例 1:
// Node.js program to demonstrate the
// script.runInNewContext() method
// Including util and vm module
const util = require('util');
const vm = require('vm');
// Constructing context
const context = { x: 3, y:4 };
// Constructing a script
const script = new vm.Script('x *=11, y *=4;');
// Calling runInNewContext method
script.runInNewContext(context);
// Displays output
console.log("The output is: ", context);
输出:
The output is: { x: 33, y: 16 }
示例 2:
// Node.js program to demonstrate the
// script.runInNewContext() method
// Including util and vm module
const util = require('util');
const vm = require('vm');
// Creating contexts
cont = {
animal: 'dog',
total_number: 5
};
// Creating script with its parameters
var script = vm.createScript(
'total_number += 5; name = "Sheru"', 'file.vm');
// Calling runInNewContext method
script.runInNewContext(cont);
// Displays output
console.log(cont);
输出:
{ animal: 'dog', total_number: 10, name: 'Sheru' }
参考: https://nodejs.org/api/vm.html#vm_script_runinnewcontext_contextobject_options