当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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:它包含一个布尔值。如果为true,则在提供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 }

在此,商品为(60 * 10 = 600)为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




相关用法


注:本文由纯净天空筛选整理自nidhi1352singh大神的英文原创作品 Node.js | script.runInContext() Method。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。