我正在使用js-xlsx来读取Node.js服务器中的Excel文件。该文件使用多部分表单数据发布,并存储在临时位置。但是,当我正在读取文件时,看起来我的Node.js线程被阻止,无法提供其他请求。在下面的代码中,如果我在/ read的调用挂起时调用/,则调用/ stalls直到读取完成。
const express = require('express');
var XLSX = require('xlsx');
const app = express()
app.get('/', function (req, res) {
res.send('Hello World!')
})
app.get('/read', function (req, res) {
console.log("Starting file read ...");
var workbook = XLSX.readFile("/tmp/myfile.xlsx")
console.log("Done file read ...");
res.send('File Read')
})
app.get('/readwithtimeout', function (req, res) {
console.log("Starting file read ...");
setTimeout(function() {
var workbook = XLSX.readFile("/tmp/myfile.xlsx")
console.log("Done file read ...");
}, 0);
res.send('File Read')
})
app.listen(3000, function () {
console.log('Example app listening on port 3000!')
})
这是读取Excel文件并解析它的正确方法吗?或者我应该做别的事吗?
答案 0 :(得分:0)
根据他们的文档:https://github.com/SheetJS/js-xlsx/tree/master/demos/server
readFile / writeFile函数包装fs。{read,write} FileSync:
......这很烦人。看起来您可以使用{
"jcr:primaryType": "cq:Page",
"jcr:createdBy": "admin",
"jcr:created": "Fri Nov 03 2017 13:56:12 GMT+0000",
"jcr:content":
{
"jcr:primaryType": "cq:PageContent",
"jcr:createdBy": "admin",
"jcr:title": "Parent page",
"cq:template": "/apps/myproject/templates/common-page",
"isRootPage": true,
"jcr:created": "Fri Nov 03 2017 13:56:12 GMT+0000",
"cq:lastModified": "Fri Nov 03 2017 13:56:12 GMT+0000",
"sling:resourceType": "myproject/components/page",
"cq:lastModifiedBy": "admin"
}
}
代替,这样您就可以使用XLSX.read()
的异步版本,例如:
fs.readFile()
我不确定如果xls解析也很慢并且同步,它是否有帮助,但至少读取的文件将是异步的。