我正在学习javascript,现在我正试图从我的express node.js后端的字符串数组中获取单词频率计数。我的代码如下:
upload(req, res, function(err) {
if (err) {
console.log(err);
return res.end('Error');
} else {
console.log(req.body);
req.files.forEach(function(item) {
const data = fs.readFileSync(item.path);
pdfText(data, function(err, chunks) {
chunks.forEach(function(item, index){
newitem = item.split(" ");
newitem.forEach(function(item, index){
});
});
});
});
// no output at this point
console.log(dictCount);
res.end('File uploaded');
}
});
当我执行console.log(dictCount)时,没有输出。我尝试通过在if(item.match)子句中执行console.log来调试代码,但这会使Express应用程序崩溃。为什么会发生这种情况我感到很沮丧?有人可以提供一些提示吗?非常感谢!
答案 0 :(得分:1)
我想到了我认为我看到的问题:
upload(req, res, function(err) {
if (err) {
console.log(err);
return res.end('Error');
} else {
console.log(req.body);
req.files.forEach(function(item) {
const data = fs.readFileSync(item.path);
pdfText(data, function(err, chunks) { // asynchronous
chunks.forEach(function(item, index){ // runs later
newitem = item.split(" ");
newitem.forEach(function(item, index){
if(item.match(/^[a-z0-9]+$/i)){
if(item in dictCount){
dictCount[item].count++;
// console log here crash the app
//console.log(item);
//console.log(dictCount[item]);
}else{
dictCount[item]={word: item, count:0};
}
}
});
});
});
});
// no output at this point
console.log(dictCount); // runs immediately, before the "runs later" part
res.end('File uploaded');
}
});
这可能会改为:
此外,这里有一个使用npm bluebird模块和节点8+ async / await来减少代码的示例:
upload(req, res, async err => {
try {
if (err) {
console.log(err);
return res.end('Error');
} else {
console.log(req.body);
await bluebird.each(req.files, async item => {
const data = fs.readFileSync(item.path);
const chunks = await bluebird.fromCallback(cb => pdfText(data, cb));
chunks.forEach((item, index) => {
newitem = item.split(" ");
newitem.forEach((item, index) => {
if (item.match(/^[a-z0-9]+$/i)) {
if (item in dictCount) {
dictCount[item].count++;
// console log here crash the app
//console.log(item);
//console.log(dictCount[item]);
} else {
dictCount[item] = { word: item, count: 0 };
}
}
});
});
});
console.log(dictCount);
res.end('File uploaded');
}
} catch (e) {
res.end('Error')
}
});
编辑:删除了无效的示例。