2017-08-08 82 views
1

执行代码我有一些解析PCAP文件和解析的数据写入到一个数组data = []然后代码将这些数据写入到一个文件JSON:Node.js的特定的顺序

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(...)。总而言之,我的问题是:如何在写入文件之前强制节点执行我的代码?

任何帮助,非常感谢。

回答

1

你需要编写整理分析

parser.on('end', function(){ 
    data = JSON.stringify(data); 
    fs.writeFile("C:/Users/Brandt Winkler Prins/Desktop/Project/data.json",data); 
}); 
+0

后提交只想说感谢并获得评论员徽章 – BWP

1

解析器将一次从文件中读取一个数据包,并为每个数据包提出on()方法。

在写入文件之前,您如何知道数据包的数量已经达到?

你可以这样做:

  1. 做一个简单的梅索德,就像您添加在你on()的结束和控制,有没有更多的数据读取check_finished_and_save()。如果是,则写入文件。

  2. 你可以简单地你的结果添加到您的文件(模式aappend)。每次调用on()时,都会将结果附加到文件末尾。

1

获取结束事件解析器,做你的东西,如字符串化和写文件操作

parser.on('end', function (session) { 
    data = JSON.stringify(data); 
    fs.writeFile("C:/Users/Brandt Winkler Prins/Desktop/Project/data.json",data); 
});