我正在运行一个快速服务器。其中一个post
路由执行http请求,其中每个请求都要将数据记录到文件中。我将记录的数据是从正在发送的数据中提取的。
我发送的数据是xml格式,所以我先用xml2js模块解析它。
之后我读了这个文件,所以我可以附加我的新JSON,之后我把结果写回我的文件。我正在使用jsonfile
模块来读取和写入我的json文件。
我目前担心的是同时发出2个请求。
我的读/写将是异步的,我会丢失数据。我相信当文件开始增长并且函数需要更多时间才能完成时,问题会更加明显。
那我该如何处理呢?
我完全反对使用readfilesync
和writefilesync
。
...
app.post('/testapi', function (req, res) {
request({
"url": 'https://webservice.com',
"method": "POST",
"body" :req.body
},
function(err, response, body){
if (err) {
res.send(err);
} else {
res.send(body);
logSomeData(req.body);
}
});
});
function logSomeData(body) {
var currYear = new Date().getFullYear(),
currMonth = new Date().getMonth(),
fileName = __dirname + '/logs/' + currYear + '_' + currMonth + '.json';
parseString(body, function (err, result) {
jsonfile.readFile(fileName, function(err, obj) {
var logData = {test : "test"};
obj.push(logData);
jsonfile.writeFile(fileName, obj, {spaces: 2}, function(err) {
console.error(err)
});
});
});
}
答案 0 :(得分:2)
这听起来像是数据库的工作,因为数据库引擎通常更擅长处理多个连接 - 即根据需要“即时”添加记录。
然后,如果您愿意,可以将信息写入文本文件中......或者只是将SQL查询应用于数据库以获取您真正需要的信息。
确定要使用的数据库类型可能超出了此问题的范围,并且将取决于您的需求和资源。
答案 1 :(得分:-2)
您可以使用某种将内容记录到文件中的中间件,但是在读取和解析大型XML文件时,nodejs可能会遇到一些性能问题,在我的公司中,我们正在解析大型XML文件(150-140MB),单个节点应用程序将导致完整的服务器冻结,您将无法向同一服务发出任何其他请求。
如果您打算使用大量的xml解析,我建议使用其他Node \ JAVA服务来进行日志记录解析,这样您就可以让主节点服务器可用于其他请求了。 / p>
另外,我建议使用某种XML Streaming库解析你的XML文件(尤其是大文件),因此它会在流中解析它们,而不是将它们全部加载到内存中。