将excel文件数据发送到Node.js服务器并将其解析为json

时间:2018-03-31 23:02:02

标签: javascript html node.js file server-side

我对node.js比较新,而且在javascript方面不是很好。但我想要做的是将.xlsx文件发送到node.js,然后将其转换为json。但是我的要求总是{}。我的过程是,我想让用户选择一个excel文件,然后在其表单字段上单击“提交”,然后让服务器端将该excel文件转换为json。

我的代码: HTML:

<div class="input-field col s6">
                            <form name="myForm" action="sendFile" method="post" enctype="multipart/form-data">
                                <input id="fileName" name="fileName" type="file"  class="validate" >
                                <input type="submit">
                            </form>
                        </div>

我的服务器代码:

app.post("/sendFile", function(req, res){
    console.log("--------------in batch create user--------------");
    console.log("body is: "+ req.body);
    console.log(req.body.fileName);  // is undefined
    console.log(req.body); //is {}

    //I tried this as a second option but this didnt work either....

    // var form = new formidable.IncomingForm();
    // form.parse(req, function (err, fields, files) {
    //     console.log(files);
    //     console.log(fields);
    //     console.log(files.filetoupload);
    //     var oldpath = files.filetoupload.path;
    //
    //     convertExcel = require('excel-as-json').processFile;
    //     convertExcel(oldpath, null, null, function(err, data){
    //         console.log("----in convert excell ---------");
    //         console.log("data for excel is: "+data);
    //
    //     });
    // });

});

1 个答案:

答案 0 :(得分:1)

如果您使用快递,则需要一个中间件来解析请求正文和 用于处理multipart / form-data内容的multer库。 Link for the library here

以下是您的方案的简短示例:

Obs:将Excel转换为Json的部分,您可以使用问题库或node-excel-to-json

的index.html

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<div class="input-field col s6">
                            <form name="myForm" action="/sendFile" method="post" enctype="multipart/form-data">
                                <input id="fileName" name="fileName" type="file"  class="validate" >
                                <input type="submit">
                            </form>
                        </div>
</body>
</html>

server.js

var fs = require("fs");
var express = require("express");
var bodyParser = require('body-parser');
var multer = require("multer");
var upload = multer();

var app = express();

// for parsing application/json
app.use(bodyParser.json());

// for parsing application/xwww-
app.use(bodyParser.urlencoded({ extended: true }));
//form-urlencoded

// for parsing multipart/form-data
//app.use(upload.array());

//static folder
app.use(express.static('public'));


app.get('/', function(req, res) {
    fs.readFile('index.html', 'utf8', function (err,data) {
    if (err) {
        return console.log(err);
    }
        //console.log(data);
        res.write(data)
    });
});

app.post("/sendFile",  upload.single('fileName'), function(req, res){

    //text fields
    console.log(req.body);

    //file contents
    console.log(req.file);


    // process
    var response = 'Do something';
    res.json(response);

});

app.listen(8000, function () {
  console.log('Example app listening on port 8000!')
});