[英]Using npm's request package, how should you pass data originally held in a file?
我正在使用npm的请求,并且正在使用API。 通过CURL的API请求要求我使用@ site.json通过文件发送信息。
例:
curl -X POST -d @site.json 'https://api.xxxxxxx.com/site?id=123456’
这是我的代码的主要部分:
let data = JSON.stringify(`{"placement":{"name":"${placementName}"}}`);
fs.writeFile('placement.json', JSON.parse(data), (err, data) => {
if (err) console.log(err);
})
fs.createReadStream('placement.json').pipe(request(options));
// clear the file for next placement
fs.truncate('placement.json', 0, () => {console.log('done')})
因此,我能够使用此代码和我创建的函数来构建所需的文件,以确保不创建重复项。 问题是我需要多次运行脚本才能构建所有“展示位置”。
我猜这是fs软件包,并且运行速度不够快或有时无法写入文件。 我可以看到.json文件,有时数据不会清除(但会被覆盖),有时代码不会在应有的时候更新。
如果最初包含在文件中,有没有办法使用“请求”传递此json数据? 我搜索了文档,但尚未找到答案。
我已经尝试过使用json,数据,表单等选项的几种方式,而API似乎无法识别以这种方式发送的信息。 我还有其他方法可以尝试吗?
我的选择:
const options = {
url: `https://api.xxxxxxxxxx.com/placement?id=${publisherId}`,
method: 'POST',
headers: {
'Authorization': token
}
};
谢谢
fs.writeFile
是异步函数,这意味着如果要使用该文件,则需要在其回调中进行处理(该回调在文件写入磁盘后调用),这就是if (err) console.log(err);
。
但是我认为您根本不需要将文件写入磁盘。
您可以像这样直接将数据直接传递给请求:
var request = require('request');
const options = {
url: `https://api.xxxxxxxxxx.com/placement?id=${publisherId}`,
method: 'POST',
headers: {
'Authorization': token
},
json: true,
body: { placement: { name: placementName } }
};
request(options, function callback(error, response, body) {
//...
});
我没有尝试过代码。
我有答案,因此json数据或作为文件一部分的任何数据都可以通过选项传递。
我使用了body选项。 我昨晚尝试了一下,但是由于某种原因,它没有用。
我可能错过了一个步骤,但是需要先进行字符串化然后解析JSON数据,以使api正确识别代码。 现在,我的所有动作在第一次调用时都已完成。
body: JSON.parse(JSON.stringify(`{"placement":{"name":"${placementName}"}}`))
谢谢
编辑:所以这最终工作。
body: `{"placement":{"name":"${placementName}"}}`
我认为,如果您通过选项传递的数据中需要,则Request可以处理所有解析/字符串化。 也不必声明JSON。 这对我来说是一个改变游戏规则的人,因为我现在不必在代码的许多部分中使用fs。
感谢您的评论。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.