UNPKG

@node-server/renderer

Version:

NodeServerJs is a library with standard feature implemented for web and api

57 lines (52 loc) 1.76 kB
import { Handler } from "./handler"; import { Api, ApiResponse } from "./api"; import { NodeVM } from 'vm2'; import { cpus } from "os"; export class JSHandler extends Handler { extention:string = "js"; async Handle(api, req, res){ var response = new ApiResponse(); var vm = this.GetSandBox(res,req) try { response.setSuccess(await vm.run(api.func, api.filename)); var contains_error = req.GetContext("contains_errors"); if (contains_error && Object.keys(contains_error).length > 0 && response.result == undefined) { response.setError(contains_error, 400); } else if (response.result && response.result.error && typeof response.result.error === "string") { response.setError(response.result.error, 500); } } catch(e){ response.setError(e, 500); } return response; } GetSandBox(res,req){ var vm = new NodeVM({ console: 'inherit', sandbox: Object.assign({} , req.GetContext()), require: { external: true, builtin: ['path', 'fs', 'util'], root: this.Config.current_folder, } }); return vm; } Create(filepath , api_name , data) { var api = new Api(); api.name = api_name; api.filename = filepath; api.ext = this.extention; data = data.replace(/\/\*[\s\S]*?\*\/|([^\\:]|^)\/\/.*$/gm, ""); api.func = ` module.exports = (async () => { ${data} })();`; return api; } }