【发布时间】:2017-03-17 17:12:34
【问题描述】:
我正在创建一个 node.js 应用程序。它的功能之一是上传一个excel文件,然后读取它并将其内容保存在数据库中。问题是我是node.js的新手,我不理解非阻塞代码的概念,所以这个函数似乎阻塞了主线程,所以我需要一些帮助来解决这个问题。
app.post('/admin/upload_file', function(req, res) {
var sampleFile;
if (!req.files) {
res.send('No files were uploaded.');
console.log('No files were uploaded.');
return;
}
sampleFile = req.files.sampleFile;
var fileArray = sampleFile.name.split('.');
var extension = fileArray[fileArray.length - 1];
if (extension == "xlsx") {
sampleFile.mv('./public/uploads/sample_file.xlsx', function(err) {
if (err) {
res.status(500).send(err);
} else {
var entries = parsing_file(req, res);
if (entries.length > 0) {
for (var i = 0; i < entries.length; i++) {
// this loop on database queries block the main thread
model.insert_in_db(entries[0], function(rows) {});
}
}
res.redirect('/admin');
}
});
} else {
res.redirect('/admin');
}
});
parsing_file 函数解析文件并将值作为对象存储到数组中,当数据库查询上的循环(负责将值插入数据库)作为节点的主线程开始时,问题就开始了.js 被阻塞,直到循环完成它的工作。
【问题讨论】:
标签: javascript node.js multithreading asynchronous