Node-RED docker 读取目录内容时出现问题

Node-RED docker problem reading directory contents

我在 docker 容器中有一个 Node-RED 应用程序 运行ning,目的是定期读取 .csv 文件不断更新和新 .csv 文件不断更新的目录的内容有时添加。重点是定期读取新条目,解析数据,然后继续发送。

我没有使用众多 'contrib' 节点,因为我启用了 NodeJS 'fs' 模块并使用它。此外,内置 'file' 和 'file in' Node-RED 模块在读取 .csv 文件的内容时很有用,因此这不是问题。

问题来自新的 .csv 文件被添加到所有 .csv 文件所在的目录中。我希望能够读取所有文件名,然后读取所有 .csv 文件。

我已经将.csv 文件目录挂载到docker 容器中,在测试我是否能够读取文件名时,发生了奇怪的事情。即使文件在容器中可见(使用 docker exec -it CONTAINER /bin/bash 查看),一段包含 fs.readdir 的代码也不会列出文件。当我尝试 fs.readdir 也看到安装到容器中的 /data 目录的内容时,它列出了大约 10% 的时间的内容(将时间戳注入节点 运行它)

从图中可以看出,有问题的目录的内容并没有在节点的每次执行中列出。包含 .csv 文件的已安装目录的内容永远不会在 运行 使用正确的路径作为参数连接此节点时列出。

操作系统是CentOS 7,我不是sudoer。我设法做到了 none 已安装的文件或目录归 root 所有,因此它们归容器内的用户 node-red 所有。我设法将此目录文件列表拉到我的 ubuntu 上,我是 sudoer,但由于 none 的东西在那里也是 root 拥有的,我不确定这是否是问题所在。我感觉这可能与操作系统有关。

备注:

我希望这不是太多文字或太不清楚,我只是想确保至少我尝试过的大部分内容都写在这里。如果有人对 docker 下 Node-RED 的工作原理和使用 NodeJS fs 模块有一些了解,将不胜感激:)

核心Watch节点应该为您完成所有这些,无需编写功能节点。

如果您想要遍历子目录,请确保在配置中勾选正确的框。

来自监视节点的边栏文档:

The full filename of the file that actually changed is put into msg.payload and msg.filename, while a stringified version of the watch list is returned in msg.topic.

msg.file contains just the short filename of the file that changed. msg.type has the type of thing changed, usually file or directory, while msg.size holds the file size in bytes.

要回答为什么 Node-RED 大多数时候无法读取目录内容的问题,是因为使用了异步 fs.readdir 模块。当我切换到使用同步版本 fs.readdirSync 时,Node-RED 能够毫无问题地读取目录内容。