Published on

n8n 低代码中的坑

Authors
  • avatar
    Name
    wellsleep (Liu Zheng)
    Twitter

原因

n8n 是低代码平台,用于快速搭建流程。

目标流程:

graph LR
appsmith_输入数据 --> n8n_webhook接收数据 --> js_function处理 --> 存储为csv --> SFTP上传文件 --> 企业微信/邮件通知

问题一

js 处理完的 json 数组,存储为 csv 的时候只能存成一行,但是格式需要每组数据一行。

使用 item lists 组件来 split out 拆分为不同行(json 为不同 KV )

"newdata": [
"00340434659730189488;20220812091736;12345;Shenzhen;AA;DE;01;02",
"00340434659730189495;20220812091736;12345;Shenzhen;AA;DE;01;02",
"00340434659730189501;20220812091736;12345;Shenzhen;AA;DE;01;02",
"00340434659730189518;20220812091736;12345;Shenzhen;AA;DE;01;02",
"00340434659730189525;20220812091736;12345;Shenzhen;AA;DE;01;02",
"00340434659730189532;20220812091736;12345;Shenzhen;AA;DE;01;02",
"00340434659730189549;20220812091736;12345;Shenzhen;AA;DE;01;02",
"00340434659730189556;20220812091736;12345;Shenzhen;AA;DE;01;02",
"00340434659730189563;20220812091736;12345;Shenzhen;AA;DE;01;02",
"00340434659730189570;20220812091736;12345;Shenzhen;AA;DE;01;02",
"00340434659730189587;20220812091736;12345;Shenzhen;AA;DE;01;02",

变为

[
{
"newdata": "00340434659730189488;20220812091736;12345;Shenzhen;AA;DE;01;02"
},
{
"newdata": "00340434659730189495;20220812091736;12345;Shenzhen;AA;DE;01;02"
},
{
"newdata": "00340434659730189501;20220812091736;12345;Shenzhen;AA;DE;01;02"
},

问题二

n8n 自带的 SFTP 模块与服务商的 SFTP 服务器协议不兼容,报错鉴权不过(通过 n8n 连接 A 服务器,以及 A 服务器连接服务商,证实二者就是不能直连)。

使用 SSH 组件,将文件传到 A 服务器,再 SSH 到 A 服务器,使用 lftp 工具将文件传给服务商。

lftp -c "put /home/shaoke/<file> -o sftp://<username>:<password>@<服务商服务器>/prod/in/<file>"

问题三

运行 lftp 发现还是有问题,似乎把密码的一部分当成了端口号,报错 bad port

发现密码中有 / 字符,从该字符之后被识别为端口号。

这里 找到答案,

将特殊字符转义。 假设密码为!@#$!、@、#、$的转义分别为%21、%40、%23、%24。于是用lftp直接打开时就需要用如下方式: lftp user:%21%40%23%24@host:port

转义字符表

转义后恢复正常。