我有搜索功能,一旦我有搜索字符串从clinet我想循环通过文件和匹配来自FS中的文件的字符串,我有循环中的问题我想获得所有匹配结果并将结果发送到客户端。下面试图实现,但得到一个错误粘贴有问题。新的异步库任何帮助将不胜感激。如何使用nodejs使用异步回调?
app.js
app.get('/serverSearch', function (req, res) {
var searchTxt = req.query.searchTxt;
dirDirectory.readDirectory(function(logFiles){
// res.json(logFiles);
if(logFiles){
searchFileService.readFile(searchTxt,logFiles,function(lines,err){
console.log('Logs',lines);
if (err)
return res.send();
res.json(lines);
})
}
});
console.log('Search text', searchTxt);
});
service.js
var fs = require('fs');
var path = require('path');
var async = require('async');
var searchStr;
var result = [];
//Async Method
function readFile(str, logFiles, callback) {
async.series([
//Load user to get `userId` first
function(callback) {
searchStr = str;
for (var i = 0; i < logFiles.length; i++) {
if (logFiles[i].filename !== '.gitignore') {
fs.readFile('logs/dit/' + logFiles[i].filename, 'utf8', function(err, data) {
if (err) {
return console.log(err);
}
inspectFile(data);
});
}
callback(result);
}
},
//Load posts (won't be called before task 1's "task callback" has been called)
function() {
function inspectFile(data, callback) {
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
result.push(line);
// then log it
return line;
}
});
}
}
], function(err) { //This function gets called after the two tasks have called their "task callbacks"
if (err) return err;
});
};
错误
if (fn === null) throw new Error("Callback was already called.");
有在你的代码中的一些语法问题,我试图解决 – hussain
啊对不起,我是混合ES6和ES5但它应该是接近你所需要的。希望能帮助到你! – djowinz
我是否必须从'readFile'功能以及 – hussain