Сохранение нескольких данных веб-хуков в файл с интервалом времени с помощью expressjs - PullRequest
0 голосов
/ 21 марта 2019

Я пытаюсь создать средство для ловли веб-крючков, которое ловит несколько веб-крючков с массивами объектов в течение определенного времени (скажем, 3 минуты) и сохраняет все данные в одном массиве json.

Общая идея состоит в том, чтобы объединить несколько веб-крючков с массивами объектов в один массив с тайм-аутом в 3 минуты (по истечении времени веб-крючок должен продолжать прослушивать новые входящие данные), а затем отправить массив объектов в другую функцию. это будет сортировать и публиковать его.

Я использую функцию ниже, чтобы перехватить и объединить все данные в один массив, однако у меня возникают проблемы с установкой временного интервала.

fs.writeFileSync('webhook_arr.json', '[]', function (err, file) {
  if (err) throw err;
  console.log('Saved!');
});
var data_arr = [];

var wh = app.post('/', (req, res) => {
  console.log(' Webhook received!');

  let reqbody = JSON.parse(req.body);
  console.log("request body objects: " + JSON.stringify(reqbody.data.length));


  data_arr =   [ ...data_arr, ...reqbody.data ];
  console.log("data array length: " + data_arr.length);
  fs.writeFileSync('webhoook_input.json', JSON.stringify(data_arr), function (err, result) {
    if (err) console.log('error', err);
  });

  console.log(data_arr);
  res.sendStatus(200);



});

1 Ответ

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

если его можно сохранить во время запроса, вы можете сделать простое сравнение времени, что-то вроде этого:

let date = new Date().getTime();

if (new Date().getTime() - date >= 1000 * 60 * 3 && data_arr.length > 0) {
    saveTofile(data_arr);
    data_arr = [];
}

Или вы можете установить просто setInterval ():

setInterval(() => {
    if (data_arr.length > 0) {
        saveTofile(data_arr);
        data_arr = [];
    }
}, 1000 * 60 * 3 )
...