第一次海报,很高兴有一个社区在这里合作!
下面是我的情况:我使用Node为公司的合规性设置自动化-从MDM服务器获取报告并将其发布到合规性平台(拖船逻辑)。我们的想法是通过AWS Lambda定期部署它。基本逻辑是这样的:getToken获取一个auth令牌,然后将其传递给getReports。getReports循环遍历一个端点数组以从MDM获取报告,然后将这些报告沿着传递给fileReport- 然后将该数据发布到端点。
问题是最终端点需要一个文件作为有效负载(下面的POST请求示例)。我通过使用fs writeFile/readFile成功地让整个fetch链工作(和延迟),虽然这起了作用,但它并不能很好地转化为Lambda环境。理想情况下,我只想从getReports中获取有效负载(它以JSON的形式出现,但也可以作为文本接受),并将其直接推送到端点。任何关于如何清理此代码的帮助都将不胜感激!
这里的位给我最麻烦的(从最后一个文件)
第一个月
// Sample post request for final endpoint
curl -v --user <provided-username>:<given-password> \
-H "X-API-KEY: <given-x-api-key>" \
-F "collected=<date-of-evidence>" -F "file=@<local_filename_csv>;type=text/csv" \
<given-collector-url>
//getReports.js accepts a token from an earlier function and takes fileReport as the cb
function getReports(token, cb) {
const headers = {
method: 'GET',
headers: {
'accept': 'application/json',
'Authorization': `Bearer ${token}`
},
redirect: 'follow'
}
for (let i = 0; i < reportsArray.length; i++) {
fetch(reportsArray[i].source, headers)
.then(res => res.json())
// writeFile leftover from successful deploy
/*.then(data => fs.writeFile(`./reports/${reportsArray[i].name}.json`, data, function (err) {
if (err) throw err;
}))*/
.then(res => cb(i, res))
.catch(error => console.log('error', error))
}
};
//fileReport.js - i identifies the right endpoint from the imported array and sets filename. x is the JSON payload passed down from getReports
function fileReport(i, x) {
const form = new FormData();
form.append('collected', getTimestamp());
form.append('file', x, `${reportsArray[i].name}.json`);
fetch(`${reportsArray[i].dest}`, {
method: 'POST',
headers: {
'X-API-KEY': `${process.env.TUGBOAT_X_API_KEY}`,
'Authorization': 'Basic ' + btoa(`${process.env.TUGBOAT_USERNAME}:${process.env.TUGBOAT_PASSWORD}`)
},
body: form
});
};
1条答案
按热度按时间31moq8wy1#
您没有正确地将文件传递到
formData
下面的伪代码演示了如何工作:
字符串
奖励:
如果您需要在浏览器中执行此操作,则只需换出
file
以使用用户选择的文件。我来告诉你。
而不是:
型
有一个这样的表单元素:
型
还有一个这样的管理员
型
然后确保你的
formData
使用这个file
来代替你上面删除的fs.createReadStream()
文件。