當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。