每次api调用时如何从回调中获得响应?

时间:2017-03-01 18:49:29

标签: javascript node.js callback

我有从客户端接收字符串的搜索功能,所以一旦完成循环过程,使用回调将匹配results发送到客户端。以下代码有两个问题

我第一次有搜索字符串,它会发送响应results但是

2秒如果我搜索不同的字符串,它会发送空数组results

3-如果我再次搜索第一个字符串,我会收到回复

知道在下面的代码中实现了什么错误。

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);
});

searchService.js

var results = [];
var searchStr;
function readFile(str, logFiles, callback) {
    searchStr = str;
    // loop through each file
    async.eachSeries(logFiles, function (logfile, done) {
        // read file
        fs.readFile('logs/dit/' + logfile.filename, 'utf8', function (err, data) {
            if (err) {
                return done(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);
                }
            });
            // when you are done reading the file
            done();
        });

    // wrong: }), function (err) {
    }, function (err) {
        if (err) {
            console.log('error', err);
        }
        console.log('all done: ', results);

        // wrong: results.map(result, function (result){
        results.map(function (result){
            console.log(result);
        });

        // send back results
        callback(results);
        results = [];
    });
}

0 个答案:

没有答案