Lets sagen, ich habe mehrere Suchbegriffe von Client-Seite searchStr
, die mit der Zeile in Datei übereinstimmen sollte, wie ich sowohl text
mit jeder Zeile in Datei übereinstimmen und drücken Sie diese Zeile auf results
. Mit unterem Code bekomme ich leere Antwort von results
, Irgendeine Idee, was falsch umgesetzt wird?Wie man mehrere Schlüsselwörter in der Datei mit nodejs sucht?
Search.js
function asyncFiles(filesData) {
async.eachSeries(filesData.logFiles, function(logfile, done) {
// read file
readStream = fs.createReadStream('./logs/' + filesData.searchEnv + '/' + logfile.filename, 'utf8')
readStream.pipe(split())
.on('data', function(line) {
var searchStr = [{"text":"4588769"},{"text":"request"}]
searchStr.forEach(function(text) {
if (line.toLowerCase().indexOf(text.toLowerCase()) != -1)
var messageDateInfo = line.split('|')[0].replace(/[\[\]']+/g, '');
messageDateInfo = new Date(messageDateInfo).getTime();
searchStartDate = new Date(searchStartDate).getTime();
searchEndDate = new Date(searchEndDate).getTime();
if (messageDateInfo - searchStartDate > 0 && searchEndDate - messageDateInfo > 0) {
results.push({
filename: logfile.filename,
value: line
});
}
});
});
done();
}, function(err) {
if (err) {
console.log('error', err);
}
readStream.on('end', function() {
callback(results);
});
results = [];
});
}
Was ist das Problem mit dem Code, den Sie haben? –
ich erhalte eine leere respone, die nicht zu "ergebnisse" pusht – hussain
Sie sind nicht zeigen, was Sie mit 'results 'tun. Könnte das Problem eher sein, dass Streams asynchron sind, aber Sie versuchen, 'result' synchron zu verwenden? Bitte aktualisieren Sie Ihre Frage mit dem tatsächlichen Problem und einem vollständigeren Beispiel. –