我刚刚为我的问题创建了一个基本用例,我遇到了问题,我将从客户端获得searchStr
个关键字数组对象,我将检查所有搜索关键字是否只与行匹配而不是匹配到{{1 }}。使用下面的代码,它总是返回results
的空数组,如何解决这个问题或者更好的方法来实现这个任务?
search.js
results
答案 0 :(得分:0)
您没有在searchStrArray中搜索TEXT;试试这个:
function matchSearchStr(line, searchStrArray) {
for (var i = 0; i < searchStrArray.length; i++) {
if (line.toLowerCase().indexOf(searchStrArray[i].text.toLowerCase()) != -1) {
results.push({
filename: "file",
value: line
});
console.log(results);
}
}
}
---- @aorfevre回复的所有者编辑
这里是我想要实现的实际代码现在我将对象数组chnaged到数组字符串,在这种情况下它会发送所有结果。
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) {
console.log(searchStr);
for(var i=0; i<searchStr.length; i++) {
if (line.toLowerCase().indexOf(searchStr[i].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){
// console.log("message date is within this time range");
results.push({
filename:logfile.filename,
value:line
});
}
}
});
done();
}
, function (err) {
if (err) {
console.log('error', err);
}
readStream.on('end',function(){
callback(results);
});
results = [];
});
}
}