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

时间:2019-03-02 05:55:53

标签: javascript node.js json npm request

我正在使用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
    }
};

谢谢

2 个答案:

答案 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。

感谢评论人员。