【发布时间】:2017-11-10 15:14:15
【问题描述】:
基本上我有来自客户端的多个搜索字符串,我必须在文件的每一行中找到这些字符串,如果该行与来自用户输入的所有字符串匹配,则将该行推送到结果,下面的代码发送空数组results .
如何遍历每个搜索字符串并找到匹配项,一旦循环完成,将所有匹配行推送到results。
searchLogs.js
/* Example client input
var searchStr = [{"text":"457383",{"text":"requestPdr"}]
*/
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) {
for (var i = 0; i < searchStr.length; i++) {
if (line.toLowerCase().indexOf(searchStr[i].toLowerCase()) != -1)
results.push({
filename: logfile.filename,
value: line
});
}
});
},
function(err) {
if (err) {
console.log('error', err);
}
readStream.on('end', function() {
callback(results);
});
results = [];
});
【问题讨论】:
-
我想有两种情况。一种是代码抛出错误但将
err留空,另一种是 if 语句永远不会为真。我认为后者更有可能,但您可以检查并发布您的结果吗?
标签: javascript arrays node.js search fs