Directus Flow问题:Run Script中modifiedPayload可用,后续操作未定义
Directus Flow中Run Script添加的modifiedPayload在后续操作中返回undefined
问题场景
在开发Directus Flow时,通过Run Script操作向data对象添加了modifiedPayload对象,该对象在Run Script内部已成功创建并打印,但后续的Log或Webhook操作中访问{{ modifiedPayload }}时却返回undefined。
Run Script代码
module.exports = async function (data) { // 创建时间戳 const timestamp = new Date().toISOString(); // 提取日期(YYYY-MM-DD) const date = timestamp.split('T')[0]; // 提取时间(HH:MM:SS) const time = timestamp.split('T')[1].split('.')[0]; // 创建包含额外字段的新对象 const modifiedPayload = { ...data.$trigger.payload, // 展开原始payload timestamp, date, time, location: "Office A" // 可按需替换为动态逻辑 }; // 调试日志 console.log("Modified Payload in Run Script:", modifiedPayload); // 返回修改后的data return { ...data, // 展开原始data modifiedPayload // 添加新属性 }; };
后续操作配置
Run Script之后添加了Log操作,消息内容设置为:
Modified Payload: {{ modifiedPayload }}
但日志显示modifiedPayload为undefined。
Run Script执行后的Payload确认
查看Run Script输出的Payload,确认modifiedPayload已存在:
{ "$trigger": { "event": "attendances.items.create", "payload": { "event_type": "check-in", "user_id": "51a12d76-b674-4018-96b6-da95dc5115e2" }, "key": 90, "collection": "attendances" }, "$last": null, "$accountability": { "role": "a846c34e-cb97-48e6-8e4f-87f92a570bfd", "user": "9e4032ca-4676-4c89-937e-77f3c80e3c2a", "roles": [ "a846c34e-cb97-48e6-8e4f-87f92a570bfd" ], "admin": true, "app": true, "ip": "127.0.0.1", "userAgent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36", "origin": "http://0.0.0.0:8055", "session": "81oeUm9_Sd5KKfmGazQZqFHPWHZaQ5d6FSW4HhWt39KhQ8XQx2HeIrqM7aai1vwg" }, "$env": {}, "event_type": null, "modifiedPayload": { "event_type": "check-in", "user_id": "51a12d76-b674-4018-96b6-da95dc5115e2", "timestamp": "2025-03-22T18:17:24.090Z", "date": "2025-03-22", "time": "18:17:24" } }
已尝试的排查步骤
- 验证Run Script已正确将
modifiedPayload添加到返回的data对象中 - 在Run Script后立即添加Log操作验证字段
- 确认Flow触发事件为
attendances.items.create - 检查用户角色对Flow和集合的访问权限
预期与实际行为
- 预期:
modifiedPayload可在后续操作中正常访问 - 实际:后续操作中
modifiedPayload显示为undefined
解决方案
Directus Flow中,每个步骤的输出结果默认会被存储在$last变量中,而非直接合并到全局顶级变量里。因此后续操作需要通过$last来引用Run Script返回的字段:
将Log操作的消息内容修改为:
Modified Payload: {{ $last.modifiedPayload }}
原理说明
Run Script的返回值会被Flow赋值给$last,后续步骤要访问上一步的输出,必须通过$last前缀。直接使用{{ modifiedPayload }}会去全局初始的data对象中查找,而初始对象里并没有这个字段,因此返回undefined。
内容的提问来源于stack exchange,提问作者shahabas ap
相关产品推荐
相关产品推荐

