Загрузите и прочитайте файл Excel в NodeJs - PullRequest
0 голосов
/ 03 марта 2019

Мне нужно загрузить лист 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 и пытаюсь отобразить примеры, доступные онлайн, чтобы делать вещи в методе контроллера.Любые указатели будут высоко оценены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...