Object SandBox
Objecte sandbox de seguretat, utilitzat per gestionar un espai operatiu independent
Tot el codi s’executa en el seu propi sandbox, el requeriment global cridarà al sandbox actual per carregar el mòdul i el sandbox es passarà al sandbox carregat mitjançant require. L'exemple següent crea un sandbox i restringeix l'accés al mòdul bàsic globalassert Mòdul i afegiu dos mòduls personalitzats, a i b:
1
2
3
4
5
6
7
8var vm = require('vm');
var sbox = new vm.SandBox({
a: 100,
b: 200,
assert: require('assert')
});
var mod_in_sbox = sbox.require('./path/to/mod');
Herència
Constructor
SandBox
Construïu un nou objecte sandbox de seguretat i inicialitzeu el mòdul bàsic
1new SandBox(Object mods);
Paràmetres de trucada:
- mods: Objecte, especifiqueu el diccionari d'objectes del mòdul que voleu afegir
Construïu un nou objecte sandbox de seguretat i inicialitzeu el mòdul bàsic
1
2new SandBox(Object mods,
Function require);
Paràmetres de trucada:
- mods: Objecte, especifiqueu el diccionari d'objectes del mòdul que voleu afegir
- require: Funció, funció personalitzada que requereix, quan el mòdul no existeix, truqueu primer a la funció personalitzada i després carregueu-la des del fitxer sense tornar
Construeix un nou objecte de seguretat global independent de seguretat i inicialitza el mòdul bàsic
1
2new SandBox(Object mods,
Object global);
Paràmetres de trucada:
- mods: Objecte, especifiqueu el diccionari d'objectes del mòdul que voleu afegir
- global: Objecte, especifiqueu la propietat global inicialitzada
Construeix un nou objecte de seguretat global independent de seguretat i inicialitza el mòdul bàsic
1
2
3new SandBox(Object mods,
Function require,
Object global);
Paràmetres de trucada:
- mods: Objecte, especifiqueu el diccionari d'objectes del mòdul que voleu afegir
- require: Funció, funció personalitzada que requereix, quan el mòdul no existeix, truqueu primer a la funció personalitzada i després carregueu-la des del fitxer sense tornar
- global: Objecte, especifiqueu la propietat global inicialitzada
Atributs de membre
global
Objecte, consulta sandbox global Objecte
1readonly Object SandBox.global;
modules
Objecte, consulteu l'objecte de diccionari de tots els mòduls existents al sandbox
1readonly Object SandBox.modules;
Funció de membre
add
Afegiu un mòdul bàsic al sandbox
1
2SandBox.add(String id,
Value mod);
Paràmetres de trucada:
- id: Cadena, especifiqueu el nom del mòdul que voleu afegir, aquest camí no té res a veure amb l'script en execució actual, ha de ser un camí d'accés absolut o un nom de mòdul
- mod: Valor, especifiqueu l'objecte del mòdul que voleu afegir
Afegiu un conjunt de mòduls bàsics al sandbox
1SandBox.add(Object mods);
Paràmetres de trucada:
- mods: Objecte, especifiqueu el diccionari d'objectes del mòdul que s'afegirà, el mòdul javascript afegit generarà una còpia per evitar la interferència d'objectes de modificació de sandbox
addScript
Afegiu un mòdul de script a la zona de proves
1
2Value SandBox.addScript(String srcname,
Buffer script);
Paràmetres de trucada:
- srcname: Cadena, especifiqueu el nom de l'script que voleu afegir, srcname ha d'incloure l'extensió, com ara json O js, jsc
- script: Buffer, Especifiqueu el codi binari que voleu afegir
Resultat de retorn:
- Value, Retorna l'objecte del mòdul carregat
remove
Suprimiu el mòdul bàsic especificat del sandbox
1SandBox.remove(String id);
Paràmetres de trucada:
- id: Cadena, especifiqueu el nom del mòdul a suprimir, aquest camí no té res a veure amb l'script en execució actual, ha de ser un camí d'accés absolut o un nom de mòdul
has
Detectar l’existència del mòdul bàsic de la caixa de sorra
1Boolean SandBox.has(String id);
Paràmetres de trucada:
- id: Cadena, especifiqueu el nom del mòdul a detectar, aquest camí no té res a veure amb l'script en execució actual, ha de ser un camí d'accés absolut o un nom de mòdul
Resultat de retorn:
- Boolean, existeix
clone
Copieu el sandbox actual, el sandbox nou conté els mòduls del sandbox actual, amb el mateix nom i requereixen funció
1SandBox SandBox.clone();
Resultat de retorn:
- SandBox, S'ha copiat el sandbox nou
freeze
Congelar el sandbox actual, el sandbox després de la congelació, a la dreta global Les modificacions realitzades seran ignorades
1SandBox.freeze();
refresh
Torneu a carregar el mòdul al sandbox, aquesta operació només reiniciarà el mòdul, restablirà les variables del mòdul i no actualitzarà el codi del mòdul
1SandBox.refresh();
run
Executeu un script
1
2SandBox.run(String fname,
Array argv = []);
Paràmetres de trucada:
- fname: Cadena, especifiqueu el camí de l’escript que s’executarà, aquest camí no té res a veure amb l’escript en execució actual, ha de ser un camí de ruta absolut
- argv: Array, especifiqueu el paràmetre que s'executarà; aquest paràmetre es pot obtenir mitjançant argv a l'script
resolve
Consulteu un mòdul i torneu el nom complet del fitxer
1
2String SandBox.resolve(String id,
String base);
Paràmetres de trucada:
- id: Cadena, especifiqueu el nom del mòdul a carregar
- base: Cadena, especifiqueu el camí de cerca
Resultat de retorn:
- String, Torneu el nom complet del fitxer del mòdul carregat
require
Carregueu un mòdul i torneu l'objecte del mòdul
1
2Value SandBox.require(String id,
String base);
Paràmetres de trucada:
- id: Cadena, especifiqueu el nom del mòdul a carregar
- base: Cadena, especifiqueu el camí de cerca
Resultat de retorn:
- Value, Retorna l'objecte del mòdul carregat
setModuleCompiler
Afegiu un compilador a l'extname especificat, extname no pot ser l'extensió integrada del sistema (inclosa ('.js', '.json','. jsc ','. wasm '}), el compilador ha de retornar un script javascript vàlid.
1
2SandBox.setModuleCompiler(String extname,
Function compiler);
Paràmetres de trucada:
- extname: La cadena, el nom d'ext especificat, ha de començar per '.' I és una extensió integrada que no és del sistema
- compiler: Funció, compileu la funció de devolució de trucada, tots els fitxers amb extname només necessitaran una vegada. El format de la funció de devolució de trucada és
compiler(buf, requireInfo)
, buf és el fitxer llegitBuffer, l'estructura de requireInfo és{filename: string}
.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22var vm = require('vm');
var sbox = new vm.SandBox({});
// 编译 typescript 脚本为 js 并加载
sbox.setModuleCompiler('.ts', tsCompiler);
var mod_ts = sbox.require('./a.ts');
// 编译 coffee 脚本为 js 并加载
sbox.setModuleCompiler('.coffee', cafeCompiler);
var mod_coffee = sbox.require('./a.coffee');
// 编译 jsx 脚本为 js 并加载
sbox.setModuleCompiler('.jsx', reactCompiler);
var mod_react = sbox.require('./a.jsx');
// 编译 yml 脚本为自定义的内容(如 API 集合) 并加载
sbox.setModuleCompiler('.yml', yaml2Rest)
sbox.setModuleCompiler('.yaml', yaml2Rest)
// 编译 markdown 为自定义的内容(如 html 字符串或 XmlDocument 对象) 并加载
sbox.setModuleCompiler('.md', mdCompiler)
sbox.setModuleCompiler('.markdown', mdCompiler)
toString
Retorna la representació de cadena de l'objecte, generalment retorna "[Objecte natiu]", l'objecte es pot tornar a implementar segons les seves pròpies característiques
1String SandBox.toString();
Resultat de retorn:
- String, Retorna la representació de cadena de l'objecte
toJSON
Retorna la representació en format JSON de l'objecte, generalment retorna una col·lecció d'atributs llegibles definits per l'objecte
1Value SandBox.toJSON(String key = "");
Paràmetres de trucada:
- key: Cadena, sense utilitzar
Resultat de retorn:
- Value, Retorna un valor que conté JSON serialitzable