📜  Node.js script.runInContext() 方法

📅  最后修改于: 2022-05-13 01:56:47.962000             🧑  作者: Mango

Node.js script.runInContext() 方法

script.runInContext()方法用于运行已编译的代码,该代码存在于所述contextifiedObject内的vm.Script对象中并返回输出。但是,正在运行的代码无法访问本地范围。

句法:

script.runInContext( contextifiedObject, options )

参数:此方法接受上面提到的两个参数,如下所述:

  • contextifiedObject:它是由 vm.createContext() 方法返回的上下文对象。
  • options:可选参数,返回对象。它包含以下参数:
    1. displayErrors:如果在编译代码时抛出错误,则它保存一个布尔值,即 true,并且抛出错误的代码行链接到堆栈跟踪。它的默认值为 true。
    2. timeout:它保存一个整数值,指定在结束执行之前执行所述代码所花费的毫秒数。但是,如果关闭执行,则会发生错误。并且这个值绝对必须是一个正整数。
    3. 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