【发布时间】:2015-12-29 22:28:02
【问题描述】:
我有一个读取和写入日志文件的方法,所有用户的每个请求都会调用此方法,然后将日志写入文件中的请求路径。问题有两个:
- 考虑到并发问题,是否可以在异步模式下安全读取然后写入文件?
- 如果第一个问题是,下面的代码是否可以考虑并发问题?
- 如果第一个问题是,我该怎么办?
请忽略异常和性能问题,这是一个教学代码。
var logFile = '/tmp/logs/log.js';
app.get("/", function(req){
var log = {path: req.path, date: new Date().getTime()};
log(log);
});
function log(data){
fs.exists(logFile, function(exists){
if(exists){
fs.readFile(logFile, function (err, data) {
if (err){
throw err
}
var logData = JSON.parse(data.toString());
logData.push(data);
writeLog(logData);
});
}else{
writeLog([data]);
}
});
}
function writeLog(base){
fs.writeFile(logFile, JSON.stringify(base, null, '\t'), function(err) {
if(err)
throw err;
});
}
【问题讨论】:
-
你已经在异步读写了——
readFileSync和writeFileSync会同步进行。 -
对不起,如果我不清楚,我需要知道我是否可以异步完成
-
我是说你已经使用你编写的代码了。然而,本杰明在下面提出了一个很好的观点。
-
仅供参考,当从异步回调中抛出时,您的
throw err不会做任何有用的事情。它不会返回到您可能拥有的任何异常处理程序。该错误基本上只是默默地停止处理。多个嵌套的异步操作,确实需要类似 Promise 的东西来进行正确的错误处理。 -
@jfriend00,是的.. 关键是在这种情况下我是否可以在异步模式下进行读/写
标签: node.js