代码执行节点

代码执行节点如何使用?

用户代码运行在 vm2 的 NodeVM 沙箱内, 配置为 external: true + builtin: requireWhiteList。

沙箱运行机制

所有代码在隔离的 vm2 NodeVM 沙箱中执行,不注入任何全局对象。 需要的模块必须显式 require, 白名单之外的包会直接抛出错误,确保运行环境安全可控。

支持的包清单

以下模块可在代码节点中通过 require 直接使用

包名类型版本用途
console内置-日志输出
cryptoNode 内置-加解密 / 哈希 / 签名
eventsNode 内置-EventEmitter
querystringNode 内置-URL 查询串解析
crypto-jsnpm^4.1.1前端友好加密库(AES / MD5 / HMAC 等)
fast-xml-parsernpm^4.2.7高性能 XML ↔ JSON
lodashnpm^4.17.21工具函数集
momentnpm^2.29.4时间处理
requestnpm^2.88.2HTTP 客户端(含文件下载)
turndownnpm^7.1.2HTML → Markdown
xml2jsnpm^0.6.2XML ↔ JS 对象

用法说明

必须显式 require

沙箱不注入全局,白名单外的包会直接抛错。

bundle 已注入

作用域中已存在变量 bundle,直接使用即可,无需 require。

通过 output 返回

使用 output = ... 设置返回值,异步逻辑请用 await。

执行超时 25s

HTTP 请求建议自带 timeout,避免整段脚本被强制中断。

禁用的敏感模块

以下 Node 模块被沙箱屏蔽,尝试 require 会直接报错:

fschild_processnethttp

代码示例

code-node.js
const _ = require('lodash');
const CryptoJS = require('crypto-js');
const moment = require('moment');

output = {
  sign: CryptoJS.MD5(bundle.inputData.text).toString(),
  now:  moment().format('YYYY-MM-DD HH:mm:ss'),
  keys: _.keys(bundle.inputData)
};

上述示例演示:从 bundle.inputData 读取输入,使用 crypto-js 计算 MD5、moment 生成当前时间、lodash 提取键名, 最终通过 output 返回结构化结果。

使用小贴士

• 需要引用其他步骤字段时,通过 bundle.inputData 访问

• 异步逻辑(如 request 请求)请配合 await / Promise 使用

• 请求库 request 建议显式设置 timeout,避免 25s 沙箱超时

• 输出对象过大或存在循环引用会导致序列化失败,请保持 output 为可 JSON 化结构

查看更多问题