我正在使用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
}
};
谢谢
答案 0 :(得分:2)
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) {
//...
});
不过,我还没有尝试过代码。
答案 1 :(得分:0)
我有答案,因此可以通过选项传递json数据或文件中包含的任何数据。
我使用了body选项。我昨晚尝试了一下,但是由于某种原因,它没有用。
我可能错过了一个步骤,但是需要先进行字符串化然后解析JSON数据,以使api正确识别代码。 现在,我的所有动作在第一次调用时都已完成。
body: JSON.parse(JSON.stringify(`{"placement":{"name":"${placementName}"}}`))
谢谢
编辑:这样就可以了。
body: `{"placement":{"name":"${placementName}"}}`
我认为,如果您通过选项传递的数据中需要,则Request可以处理所有解析/字符串化。也不必声明JSON。这对我来说是一个改变游戏规则的人,因为我现在不必在代码的许多部分中使用fs。
感谢评论人员。