Загрузка файла Node.js с использованием Formidable - события не запускаются - PullRequest
0 голосов
/ 18 января 2019

Я пытаюсь загрузить файл, используя Node.js и модуль Formidable.

npm install formidable

А потом я сделал это, пожалуйста, прочитайте заметки - где я могу объяснить, что делает каждая функция и описывает алгоритм:

// get access to the files that were sent;
// at this time I don't want the files to be uploaded yet;
// in the next function I will validate those files.
function form_parse() {
    form.parse(req, (err, fields, files) => {
      if (err) return req.Cast.error(err);
      if (Object.keys(files).length==0) return req.Cast.badRequest();
      req.files = files;
      return validate_files();
    });
  }

  // I made an object with options to validate against the
  // files. it works and continues to the process_files()
  // function only whether files are verified.
  function validate_files() {
    let limitations = require('../uploads-limitations');
    try {
      limitation = limitations[req.params.resource];
    } catch(err) {
      return req.Cast.error(err);
    }
    let validateFiles = require('../services/validate-files');
    validateFiles(req, limitation, err => {
      if (err) return req.Cast.badRequest(err);
      return process_files();
    });
  }

  // here is the problem - form.on doesn't get fired.
  // This is the time I want to save those files - after
  // fully verified
  function process_files() {
    form.on('file', function(name, file) {
      console.log(`file name: ${file.name}`);
      file.path = path.join(__dirname, '../tmp_uploads/' + file.name);
    });
    form.on('error', err => {
      return req.Cast.error(err);
    });
    form.on('end', () => {
      console.log(`successfully saved`);
      return req.Cast.ok();
    });
  }

  form_parse();

Как вы можете видеть и как я описал, проверка работает, но когда я хочу сохранить эти файлы, form.on (события) не запускаются.

1 Ответ

0 голосов
/ 18 января 2019

Да, потому что в конце вашего процесса, после анализа и проверки, вы присоединяете слушателей событий. Это должно быть сделано в первую очередь, перед началом анализа. Поскольку эти события (в файле, в случае ошибки, в конце) происходят во время синтаксического анализа, а не после.

 form.on('file',...) // First, attach your listeners
    .on('error', ...)
    .on('end', ...);

form.parse(req) // then start the parsing
...