Используя пакет запросов npm, как передавать данные, изначально хранящиеся в файле?

Я использую запрос npm и работаю с API. Запрос API через CURL требовал, чтобы я отправлял информацию через файл, используя @ 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
задан Molda 2 March 2019 в 18:56
поделиться

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) {
     //...
});

Я не пробовал код, хотя.

0
ответ дан Molda 2 March 2019 в 18:56
поделиться

У меня есть ответ, так что данные json или любые данные, которые были частью файла, могут быть переданы через параметры.

Я использовал опцию body. Я пробовал это прошлой ночью, но по какой-то причине это не сработало.

Я, вероятно, пропустил шаг, но мне нужно было преобразовать в строку и затем проанализировать данные JSON, чтобы API правильно распознал код. Теперь все мои действия выполнены, когда они нужны при первом звонке.

body: JSON.parse(JSON.stringify(`{"placement":{"name":"${placementName}"}}`))

Спасибо

Редактировать: Так что это сработало.

body: `{"placement":{"name":"${placementName}"}}`

Я думаю, что Request обрабатывает все синтаксический анализ / stringify, если это необходимо в данных, которые вы передаете через параметры. Не нужно было также объявлять JSON. Для меня это изменит правила игры, так как теперь мне не нужно использовать fs во многих частях моего кода.

Спасибо за комментарии, ребята.

0
ответ дан nyhunter77 2 March 2019 в 18:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: