@node-server/renderer
Version:
NodeServerJs is a library with standard feature implemented for web and api
57 lines (52 loc) • 1.76 kB
text/typescript
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;
}
}