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


Node.js vm.runInContext()用法及代码示例


vm.runInContext()方法用于编译代码。它在contextifiedObject的上下文中运行代码,然后返回输出。此外,正在运行的代码无法访问本地范围,并且以前使用vm.createContext()方法将contextifiedObject对象上下文化。

用法:

vm.runInContext( code, contextifiedObject, options )

参数:此方法接受上述和以下所述的三个参数:



  • code:它是要编译和运行的JavaScript代码。
  • contextifiedObject:编译和运行代码时,它将用作全局变量。
  • options:它是一个可选参数,用于保存对象或字符串,如果是字符串,则定义返回字符串的文件名。它具有以下参数:
    1. filename:它包含一个字符串。它指定在此脚本生成的堆栈跟踪中使用的文件名。默认情况下,其值为“ evalmachine.anonymous”。
    2. lineOffset:它包含一个数字,该数字指定此脚本生成的堆栈跟踪中显示的行号的偏移量。其默认值为0。
    3. columnOffset:它包含一个数字,该数字指定此脚本生成的堆栈跟踪中显示的列号的偏移量。其默认值为0。
    4. displayErrors:它包含一个布尔值,即如果在编译代码时引发错误并且由于该行引发错误的代码行链接到堆栈跟踪,则为true。默认情况下,其值为true。
    5. timeout:它包含一个整数,该整数指定在结束执行之前执行指定代码所花费的毫秒数。但是,如果执行关闭,则会发生错误。并且此值必须绝对为正整数。
    6. breakOnSigint:它包含一个布尔值。如果为true,则在提供SIGINT即(Ctrl + C)后将立即停止执行。并且如果执行停止,则会引发错误。默认情况下,其值为false。
    7. cachedData:它包含一个Buffer,TypedArray或DataView。在V8的代码缓存数据的帮助下,它提供了可选的Buffer或TypedArray或DataView以供提供的源使用。之后,可以将cachedDataRejected的值设置为true或false。这取决于V8对数据的接收。
    8. produceCachedData:它包含一个布尔值。如果其true和cachedData不再可用,则V8尝试输出该代码的代码缓存数据。如果完成此操作,则会生成一个包含V8代码缓存数据的缓冲区,然后将其存储在要返回的vm.Script实例的cachedData中。此外,根据代码缓存数据,将cachedDataProduced值设置为true或false。但是,不建议使用此选项并使用script.createCachedData()代替。默认情况下,其值为false。
    9. importModuleDynamically:当调用import()方法时,它具有在评估此模块时调用的函数。并且,如果未指定此选项,则对import()的调用将被拒绝,并出现错误。它具有以下参数:
      1. 说明符:它包含一个字符串。它是传递给import()方法的说明符。
      2. 模块:它包含vm.Module。它返回模块命名空间对象或vm.Module。

返回值:它返回脚本中执行的最后一条语句的结果。

以下示例说明了Node.js中vm.runInContext()方法的使用:

范例1:

// Node.js program to demonstrate the      
// vm.runInContext() method 
  
// Including util and vm module 
const util = require('util'); 
const vm = require('vm'); 
  
// Defining Context object 
const contextobj = { count:8 } 
  
// Contextifying stated object 
// using createContext method 
vm.createContext(contextobj); 
  
// Compiling code by using runInContext 
// method with its parameter 
vm.runInContext('count *= 4;', contextobj, 'file.vm'); 
  
// Displays output 
console.log("The output is:", contextobj);

输出:

The output is: { count:32 }

此处,输出为(8 * 4 = 32)时计数为32。

范例2:

// Node.js program to demonstrate the      
// vm.runInContext() method 
  
// Including util and vm module 
const util = require('util'); 
const vm = require('vm'); 
  
// Creating object 
cobj = { 
         name_of_school:'M.B.V', 
         number_of_students:10 
    }, 
  
// Contexifying object 
context = vm.createContext(cobj); 
  
// Calling runInContext method 
vm.runInContext('number_of_students *= 3;', 
             cobj, 'myfile.vm'); 
  
// Displays object 
console.log(cobj);

输出:

{ name_of_school:'M.B.V', number_of_students:30 }

参考: https://nodejs.org/api/vm.html#vm_vm_runincontext_code_contextifiedobject_options




相关用法


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