2017-10-30 29 views
0

Node.jsサーバーでExcelファイルを読み取るときにjs-xlsxを使用しています。ファイルはマルチパートフォームデータを使用して転記され、一時的な場所に保管されます。しかし、ファイルを読んでいるうちに、Node.jsスレッドがブロックされていて、他の要求を処理できないように見えます。次のコードでは、/ readへの呼び出しが保留中に/を呼び出すと、/ stallsへの呼び出しが完了するまで/ stallsへの呼び出しが行われます。Node.jsでjs-xlsxを使用したノンブロッキング読み取り

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

https://github.com/SheetJS/js-xlsx/tree/master/demos/server

readFileの/ WRITEFILE機能は、FSをラップFileSyncのを{読み取り、書き込み}:。かなり迷惑です

を...。 XLSの解析も遅いと同期している場合、それが役立つ場合

const XLSX = require('xlsx'); 
const fs = require('fs') 

fs.readFile("./sample.xls", (err, data) => { 
    if (err) { 
     console.log(err) 
     return; 
    } 
    const workbook = XLSX.read(data, {type:'buffer'}) 
    console.log("Done file read ..."); 

}) 

console.log("end script") 

私はわからないんだけど、:あなたは、代わりにXLSX.read()を使用することができますのようなものでfs.readFile()かの非同期バージョンを使用することができますどのように見えます少なくとも読み込まれたファイルは非同期になります。

+0

私はどちらも役に立たないと思います。私は今、適切な解決策は、ブラウザでファイルを解析し、Node.jsサーバーの解析されたデータを返信してデータベースに一括してロードすることだと考えています。 –

関連する問題