У меня есть код, который анализирует файл pcap и записывает проанализированные данные в массив data = []
а затем записывает эти данные в файл JSON:
var fs = require("fs");
var pcapp = require('pcap-parser');
var hex = "";
var data = [];
var i = 0;
function hex2a(hexx) {
var hex = hexx.toString();//force conversion
var str = '';
for (var i = 0; i < hex.length; i += 2)
str += String.fromCharCode(parseInt(hex.substr(i, 2), 16));
return str;
}
var parser = pcapp.parse('C:/Users/Brandt Winkler Prins/Desktop/data.pcap');
parser.on('packet', function(packet) {
hex = [...packet.data].map(_ => ('0' +_.toString(16)).slice(-2)).join();
var ticker = hex2a(hex.substring(282, 306).replace(/,/g,""));
var bidPrice = parseInt(hex.substring(318,342).split(",").reverse().join(""), 16);
var timestamp = parseInt(hex.substring(258, 282).split(",").reverse().join(""), 16);
if(packet.header.capturedLength == 126 && ticker == "AAPL ") {
data[2*i] = bidPrice;
data[2*i-1] = timestamp;
i++
}
});
data = JSON.stringify(data);
fs.writeFile("C:/Users/Brandt Winkler Prins/Desktop/Project/data.json",data);
Все данные записываются в соответствующий массив в parser.on(...)
однако node.js выполняет мою команду .writeFile
прежде чем он выполнит parser.on(...)
. В общем, мой вопрос таков: как я могу заставить узел выполнить мой код перед написанием моего файла?
Любая помощь приветствуется.
Вам нужно записать в файл после завершения разбора
parser.on('end', function(){
data = JSON.stringify(data);
fs.writeFile("C:/Users/Brandt Winkler Prins/Desktop/Project/data.json",data);
});
Захватите конечное событие для вашего синтаксического анализатора и делайте свои вещи, например, строгая и записывайте операции с файлами
parser.on('end', function (session) {
data = JSON.stringify(data);
fs.writeFile("C:/Users/Brandt Winkler Prins/Desktop/Project/data.json",data);
});
Ваш синтаксический анализатор будет считывать один пакет за раз из файла и повышать метод on()
для каждого пакета.
Откуда вы знаете, сколько пакетов было достигнуто, прежде чем писать в ваш файл?
Вы можете сделать:
Сделайте простой метод, например check_finished_and_save()
который вы добавляете в конце вашего on()
и который контролирует, что больше нет данных для чтения. Если да, он записывает файл.
Вы можете просто добавить свои результаты в свой файл (режим a
для append
). Каждый раз, когда вызывается on()
вы добавляете результаты в конец вашего файла.