我对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);
//
// });
// });
});
答案 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!')
});