> For the complete documentation index, see [llms.txt](https://doc.duaer.com/zh/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://doc.duaer.com/zh/troubleshooting/node-hasnt-been-executed.md).

# 在 Duaer 里排查表达式报错「Node hasn't been executed」

Duaer 表达式里引用了一个这次没运行的节点，就会报 Node 'X' hasn't been executed。常见于 If、Switch 分支之后。
## 为什么会报错

在 Duaer 里，表达式 {{ $("查询客户").item.json.name }} 读的是「查询客户」这次运行的输出。如果它在 [If](/zh/build/if.md) 没走到的分支上，或者在当前节点之后才运行，就没有数据可读，Duaer 报 Node '查询客户' hasn't been executed。

在编辑器里单独测一个节点时也会遇到：前面的节点还没跑过。点「执行前置节点」先跑一遍。

## 三种修法

1. 改连线：把要引用的节点放到当前节点之前的同一条路径上。
2. 分支汇合后用 [Merge](/zh/build/merge.md)：两条分支先汇到 Merge，再在后面引用 Merge 的输出，而不是某一条分支里的节点。
3. 确实可能没运行时先判断：{{ $if($("查询客户").isExecuted, $("查询客户").item.json.name, "") }}。没运行就给空字符串。
## Questions

### Duaer 的 isExecuted 是什么？

在 Duaer 表达式里，$("节点名").isExecuted 表示这个节点这次有没有运行，可以配合 $if 避免引用未运行节点时报错。

### Duaer 里节点明明运行了还报这个错？

看节点名是否完全一致，Duaer 区分大小写和空格。改过节点名后，旧表达式里的名字不会全部自动跟着改。

## 相关

- [在 Duaer 里用表达式转换数据](https://doc.duaer.com/zh/code/expressions.md)
- [在 Duaer 里用 If 分成 true 和 false](https://doc.duaer.com/zh/build/if.md)
- [在 Duaer 里用 Switch 按规则分多路](https://doc.duaer.com/zh/build/switch.md)
- [在 Duaer 里配置 Merge 节点](https://doc.duaer.com/zh/build/merge.md)

