#node.js #multer
#node.js #мультер
Вопрос:
Мне нужно загрузить лист Excel и прочитать его в цикле, чтобы сохранить данные в базе данных. Мне нужно сделать это внутри моего пользовательского метода контроллера. Я использую multer, xlsx для того же.
Код для загрузки Excel:
<form action="/file/upload" method="POST" encType="multipart/form-data">
<input type="file" name="file" accept="*.csv" />
<br/>
<br/>
<input type="submit" value="Submit" />
</form>
Я должен выполнить обработку Excel в uploadData
методе в FileController
. Ниже приведен код в файловом контроллере:
var bodyParser = require('body-parser');
var multer = require('multer');
var xlstojson = require("xls-to-json-lc");
var xlsxtojson = require("xlsx-to-json-lc");
var storage = multer.diskStorage({ //multers disk storage settings
destination: function (req, file, cb) {
cb(null, './public/uploads/')
},
filename: function (req, file, cb) {
var datetimestamp = Date.now();
cb(null, file.fieldname '-' datetimestamp '.' file.originalname.split('.')[file.originalname.split('.').length - 1])
}
});
var upload = multer({ //multer settings
storage: storage,
fileFilter: function (req, file, callback) { //file filter
if (['xls', 'xlsx'].indexOf(file.originalname.split('.')[file.originalname.split('.').length - 1]) === -1) {
return callback(new Error('Wrong extension type'));
}
callback(null, true);
}
}).single('file');
function uploadData(req, res) {
var exceltojson;
try {
upload(req, res, function (err) {
if (err) {
res.json({ error_code: 1, err_desc: err });
return;
}
/** Multer gives us file info in req.file object */
if (!req.file) {
res.json({ error_code: 1, err_desc: "No file passed" });
return;
}
/** Check the extension of the incoming file and
* use the appropriate module
*/
if (req.file.originalname.split('.')[req.file.originalname.split('.').length - 1] === 'xlsx') {
exceltojson = xlsxtojson;
} else {
exceltojson = xlstojson;
}
try {
exceltojson({
input: req.file.path,
output: null, //since we don't need output.json
lowerCaseHeaders: true
}, function (err, result) {
if (err) {
return res.json({ error_code: 1, err_desc: err, data: null });
}
res.json({ error_code: 0, err_desc: null, data: result });
});
} catch (e) {
res.json({ error_code: 1, err_desc: "Corupted excel file" });
}
})
}
catch (e) {
console.log(e);
}
}
Определили маршрут, как показано ниже
'POST /file/upload': {
controller: 'v1/FileController',
action: 'uploadData'
},
Он переходит к uploadData
методу в контроллере, но затем резко завершается. Не уверен, чего мне не хватает, но борюсь с последними несколькими часами. Я проверил много ссылок, но все предлагают делать все в app.js
файле. Я новичок в Node и пытаюсь сопоставить примеры, доступные онлайн, чтобы делать что-то в методе контроллера. Любые указания будут высоко оценены.