routes.js 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. // routes.js
  2. const express = require('express');
  3. const router = express.Router();
  4. // 虚拟沙盒
  5. const vm = require('node:vm');
  6. global.Parse = {
  7. title:"Parse"
  8. }
  9. const envContext = {
  10. Parse:global.Parse,
  11. module:module, // 允许代码段编写模块
  12. }
  13. // POST 路由处理
  14. /**
  15. * @param code 代码
  16. */
  17. router.post('/func', async (req, res) => {
  18. let { code,func,params } = req.body;
  19. // 加载模块
  20. console.log(req.body)
  21. let cloudModule = loadModule(code);
  22. // 调用 exampleFunc 方法
  23. let result
  24. try {
  25. console.log(cloudModule,result)
  26. result = await cloudModule[func](params); // 输出: Hello from exampleFunc!
  27. res.json({
  28. code:200,
  29. data:result
  30. });
  31. } catch (error) {
  32. res.status(500).json({
  33. code:500,
  34. error:error
  35. });
  36. }
  37. });
  38. function loadModule(code) {
  39. // 使用 vm.runInNewContext 执行代码
  40. vm.runInNewContext(code, envContext);
  41. // 返回上下文中的模块对象
  42. return envContext.module.exports;
  43. }
  44. module.exports = router;