【发布时间】:2017-07-19 16:57:16
【问题描述】:
一旦我从客户端获得参数,我想从文件系统中匹配该字符串并将匹配的数据发送回客户端。我正在尝试熟悉回调,因此在下面的代码中,当我调用回调时,它会向我发送带有正确数据的响应,但它会引发错误 - 请参见下文,粘贴代码之后。
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:
function readFile(str,logFiles,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);
callback(result);
result = [];
});
}
}
}
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;
}
});
cb(callback);
}
function cb (callback) {
callback(result);
}
错误:
_http_outgoing.js:344
throw new Error('Can\'t set headers after they are sent.');
^
错误:发送后无法设置标头。
【问题讨论】:
-
"它的抛出错误" — 什么错误?!
-
它抛出这个错误:_http_outgoing.js:344 throw new Error('Can\'t set headers after they are sent.'); ^ 错误:发送后无法设置标头。
-
@JaredSmith — 不是那个副本。可能是 stackoverflow.com/questions/18983138/… 的副本
-
@Quentin 你比我更正确。不过,两者的答案相同。
标签: javascript node.js callback fs