JavaScript执行器工具
JavaScript执行器工具允许您在工作流中安全地执行自定义JavaScript代码,提供强大的数据处理和转换能力。
🚀 快速开始
基本用法
在工作流中添加JavaScript执行器节点,编写您的处理逻辑:
// 获取输入参数
const userAge = parameters.age;
const userName = parameters.name;
// 数据处理
if (utils.isNumber(userAge) && userAge >= 18) {
return {
message: `欢迎 ${userName},您已成年`,
category: 'adult',
canAccess: true
};
} else {
return {
message: `${userName},您还未成年`,
category: 'minor',
canAccess: false
};
}
📋 可用功能
输入参数访问
parameters.参数名- 访问节点输入参数(推荐)params.参数名- 访问节点输入参数(简写)context.节点ID.result- 访问其他节点的执行结果
数据类型检查
utils.isString(value) // 检查是否为字符串
utils.isNumber(value) // 检查是否为数字
utils.isEmail(value) // 检查是否为邮箱格式
utils.isURL(value) // 检查是否为URL格式
utils.isEmpty(value) // 检查是否为空值
数据验证
utils.validate.required(value, '字段名') // 必填验证
utils.validate.minLength(value, 5, '密码') // 最小长度验证
utils.validate.range(value, 1, 100, '年龄') // 数值范围验证
字符串处理
utils.trim(str) // 去除首尾空格
utils.uppercase(str) // 转换为大写
utils.lowercase(str) // 转换为小写
utils.capitalize(str) // 首字母大写
utils.camelCase('hello-world') // 转换为驼峰命名 → helloWorld
utils.truncate(str, 20) // 截断字符串
数组操作
utils.unique([1,2,2,3]) // 数组去重 → [1,2,3]
utils.chunk([1,2,3,4,5], 2) // 数组分块 → [[1,2],[3,4],[5]]
utils.shuffle([1,2,3]) // 随机打乱数组
数学计算
utils.math.sum([1,2,3,4]) // 求和 → 10
utils.math.average([1,2,3,4]) // 平均值 → 2.5
utils.math.max([1,2,3,4]) // 最大值 → 4
utils.math.round(3.14159, 2) // 四舍五入 → 3.14
日期处理
utils.date.formatDate(new Date()) // 格式化日期
utils.date.addDays(new Date(), 7) // 日期加7天
utils.date.toISOString(new Date()) // 转ISO字符串
格式化工具
utils.format.bytes(1024) // 字节格式化 → "1 KB"
utils.format.currency(1234.56) // 货币格式化 → "¥1,234.56"
安全工具
utils.security.generateId(8) // 生成8位随机ID
utils.security.generateUUID() // 生成UUID
utils.security.base64Encode('hello') // Base64编码
utils.security.base64Decode('aGVsbG8=') // Base64解码
💡 实用示例
1. 用户数据验证和处理
const email = parameters.email;
const phone = parameters.phone;
const name = parameters.name;
// 数据验证
try {
utils.validate.required(email, '邮箱');
utils.validate.required(name, '姓名');
if (!utils.isEmail(email)) {
throw new Error('邮箱格式不正确');
}
return {
success: true,
user: {
email: utils.lowercase(email),
name: utils.capitalize(name),
phone: phone || '',
registeredAt: new Date().toISOString()
}
};
} catch (error) {
return {
success: false,
error: error.message
};
}
2. 数据统计和分析
const orders = parameters.orders || [];
// 数据分析
const totalAmount = utils.math.sum(orders.map(order => order.amount));
const averageAmount = utils.math.average(orders.map(order => order.amount));
const orderCount = orders.length;
// 按状态分组
const statusGroups = orders.reduce((groups, order) => {
const status = order.status;
groups[status] = (groups[status] || 0) + 1;
return groups;
}, {});
return {
summary: {
totalOrders: orderCount,
totalAmount: utils.math.round(totalAmount, 2),
averageAmount: utils.math.round(averageAmount, 2),
currency: utils.format.currency(totalAmount)
},
statusBreakdown: statusGroups,
reportGeneratedAt: utils.date.formatDate(new Date())
};
3. 文本内容处理
const content = parameters.content || '';
const maxLength = parameters.maxLength || 100;
// 文本处理
const processed = {
original: content,
cleaned: utils.trim(content),
wordCount: content.split(' ').length,
charCount: content.length,
summary: utils.truncate(content, maxLength),
isEmpty: utils.isEmpty(content),
hasEmail: /\S+@\S+\.\S+/.test(content),
processedAt: new Date().toISOString()
};
// 生成处理ID
processed.id = utils.security.generateId(12);
return processed;
4. 数组数据转换
const users = parameters.users || [];
// 数据转换和增强
const processedUsers = users
.filter(user => user.active) // 只处理活跃用户
.map(user => ({
id: user.id,
name: utils.capitalize(user.name),
email: utils.lowercase(user.email),
isValidEmail: utils.isEmail(user.email),
joinDate: utils.date.formatDate(user.joinDate),
category: user.age >= 18 ? 'adult' : 'minor'
}));
// 数据分组
const chunks = utils.chunk(processedUsers, 10); // 每组10个用户
return {
total: users.length,
processed: processedUsers.length,
batches: chunks.length,
data: processedUsers,
batches: chunks
};
🔧 高级功能
加密和哈希(需要启用)
当管理员启用加密模块时,您可以使用:
// 哈希计算
const password = parameters.password;
const hashedPassword = crypto.hash.sha256(password);
// 生成安全随机数
const token = crypto.secure.randomHex(32);
const sessionId = crypto.secure.randomString(16);
return {
hashedPassword: hashedPassword,
token: token,
sessionId: sessionId
};
上下文数据处理
访问工作流中其他节点的数据:
// 获取前一个节点的结果
const previousData = context.dataProcessorNode?.result?.data;
if (previousData && utils.isArray(previousData)) {
// 对前一个节点的数据进行进一步处理
const enhanced = previousData.map(item => ({
...item,
processed: true,
timestamp: new Date().toISOString(),
userInput: parameters.userInput
}));
return {
source: 'previous_node',
count: enhanced.length,
data: enhanced
};
}
return { message: '没有找到前置数据' };
⚠️ 注意事项
安全限制
- 代码在安全沙盒中执行,无法访问文件系统或网络
- 不能使用
require()、import等模块导入语句 - 禁止使用
eval()、Function()等动态代码执行
性能建议
- 避免复杂的循环和递归操作
- 处理大量数据时注意内存使用
- 代码长度限制为100KB
最佳实践
- 明确返回值:始终使用
return语句返回结果 - 数据验证:处理用户输入前进行验证
- 错误处理:使用 try-catch 处理可能的错误
- 类型检查:使用工具函数检查数据类型
// 推荐的代码结构
try {
// 1. 参数验证
const input = parameters.input;
utils.validate.required(input, '输入数据');
// 2. 数据处理
const result = processData(input);
// 3. 返回结果
return {
success: true,
data: result,
timestamp: new Date().toISOString()
};
} catch (error) {
return {
success: false,
error: error.message
};
}
🎯 常见用途
- 数据验证:验证用户输入的格式和有效性
- 数据转换:格式化、清理和转换数据
- 条件逻辑:根据条件执行不同的处理分支
- 数据统计:计算总和、平均值、计数等统计信息
- 文本处理:字符串格式化、截断、大小写转换
- 数组操作:过滤、排序、分组、去重等操作
JavaScript执行器为您的工作流提供了强大而灵活的数据处理能力,让您能够实现复杂的业务逻辑和数据转换需求。