fs.readFile
すべてのファイルをループして一致するデータを取得して結果にプッシュすると、callback(results)
に電話してクライアントに応答を送信できます。私は以下のコードでエラーが発生しますError: Callback is already called
async
アプローチを使用してこの問題を解決できます。コールバックはすでにasyncを使用して呼び出されていますか?
app.js
searchFileService.readFile(searchTxt, logFiles, function(lines, err) {
console.log('Logs', lines);
if (err)
return res.send();
res.json(lines);
})
readFile.js
var searchStr;
var results = [];
function readFile(str,logFiles,callback){
searchStr = str;
async.map(logFiles, function(logfile, callback) {
fs.readFile('logs/dit/' + logfile.filename, 'utf8', function(err, data) {
if (err) {
callback(null,err);
}
var lines = data.split('\n'); // get the lines
lines.forEach(function(line) { // for each line in lines
if (line.indexOf(searchStr) != -1) { // if the line contain the searchSt
results.push(line);
callback(results,null);
}
});
});
}), function(error, result) {
results.map(result,function (result){
console.log(result);
});
};
}
callback(results、null); OK結果で –
がapp.jsにあります。最初に 'function(err、lines)'のようなエラーが発生しました。 – hussain
はい、しかしOKになると、パラメータは逆になります –