繁体   English   中英

使用npm的请求包,应该如何传递最初保存在文件中的数据?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM