我试图使用child_process.exec
使用long命令调用curl,以便将一些数据发送到API。类似于以下示例:
exec('git log --oneline | wc -l', function(error, stdin, stderr) {
if (stdin > 1) {
exec('curl -H "Content-Type: application/json" -X POST -d \'{"value1": "\'"$arg"\'"}\' https://https://maker.ifttt.com/trigger/{event}/with/key/<my-key>', { "env" : {"arg": stdin } });
}
})
因此,如果git repo在其git log
输出中包含多行,那么您对某些API(此处为ifttt.com中的简单webhook)执行POST请求,其中您需要在过程中传递一些变量(arg
)。
请注意,这是最好的尝试,但总的来说,我在努力避免单引号和双引号。在这种特殊情况下,HTTP请求未正确发送,因为正文包含换行符:
POST / HTTP/1.1
Host: <some-host>
User-Agent: curl/7.50.1
Accept: */*
Content-Type: application/json
Content-Length: 16
{"value1": "2
"}
最后,我不得不使用外部bash脚本:
exec('./send_request.sh $arg', { "env": {"arg": stdin } });
但我仍然非常好奇如何让它在同一个js
文件中运行。
如果有帮助,我运行节点6.11.0并卷曲7.52.1。
答案 0 :(得分:1)
尝试:
exec('git log --oneline | wc -l', function(error, stdin, stderr) {
if (stdin > 1) {
exec('curl -H "Content-Type: application/json" -X POST -d \'{"value1": "\'"$arg"\'"}\' https://https://maker.ifttt.com/trigger/{event}/with/key/<my-key>', { "env" : {"arg": stdin.replace(/\n/g, '') } });
}
})
发生的事情是你的变量&#st;&#39; (您应该将其重命名为&#39; stdout&#39; )在其末尾有\n
。