Используя пакет запросов npm, как передавать данные, изначально хранящиеся в файле? - PullRequest
0 голосов
/ 02 марта 2019

Я использую запрос 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
    }
};

Спасибо

Ответы [ 2 ]

0 голосов
/ 02 марта 2019

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

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

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

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

Спасибо

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

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

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

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

0 голосов
/ 02 марта 2019

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

У меня естьне пробовал код, хотя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...