原因
n8n 是低代码平台,用于快速搭建流程。
目标流程:
graph LR
appsmith_输入数据 --> B[n8n_webhook接收数据]
B --> C[js_function处理]
C --> D[存储为csv]
D --> E[SFTP上传文件]
E --> F[企业微信/邮件通知]
问题一
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
转义后恢复正常。
Comments