【发布时间】:2016-10-29 05:39:21
【问题描述】:
我有一个快速服务器正在运行。 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)
});
});
});
}
【问题讨论】:
-
这就是人们使用数据库而不是 JSON 文件的原因。他们为您处理文件锁定的所有问题。
-
@Quentin 我的公司使用 Oracle DB。 Oracle 确实有它的 nodejs 驱动程序,但安装仍然很笨重,而且驱动程序相当新鲜。是否有其他轻型数据库可以用于此目的,是否值得?
-
SQLite 浮现在脑海中。是的。是的。
-
@Quentin 这样的记录器在这种情况下有用吗?记录器能解决读/写异步问题吗?
标签: javascript node.js express request fs