2016-05-23 93 views
0

使用Gulp我需要搜索我的文件的字符串,並找到該字符串時記錄到控制檯。吞嚥每個錯誤

當我搜索每個文件中存在的字符串時,以下方法可用。

function logMatches(regex) { 
    return map(function(file, done) { 
    file.contents.toString().match(regex).forEach(function(match) { 
     console.log(match); 
    }); 
    done(null, file); 
    }); 
} 

var search = function() { 
    return gulp.src(myfiles) 
    .pipe(logMatches(/string to search for/g)); 
}, 

然而,如果在每一個文件中的字符串心不是那麼我得到的錯誤:

TypeError: Cannot read property 'forEach' of null 

我知道有從正則表達式匹配的結果,因爲他們正在登錄到控制檯(錯誤之前) 。

+0

那是'map'功能從一個衆所周知的圖書館嗎?另外,你能指定一些輸入和預期結果嗎? –

回答

0

它看起來像你的內聯函數被稱爲多次(我想這就是map應該這樣做)。

第一次,正則表達式匹配,正如你在控制檯日誌中看到的那樣。

但第二次,它不匹配。所以,.match(regex)返回null,並且您有效地調用null.forEach(...),因此錯誤。

嘗試調用它forEach之前檢查你的正則表達式的結果:

return map(function(file, done) { 
    var contents = file.contents.toString(); 
    var matches = contents.match(regex); 
    console.log(contents, matches); // Here you can see what's going on 
    if(matches) matches.forEach(function(match) { 
     console.log(match); 
    }); 
    done(null, file); 
    });