NodeJS Многопартийная загрузка файла в Azure и текстовое поле

Мне нужно убедиться, что документ mongodb существует, прежде чем продолжить загрузку файлов Azure.

Форма состоит из файла и текстового поля, необходимая логика следующая:

  1. Отправка формы
  2. Получить текстовое поле
  3. Поиск в mongodb для документа с данными текстового поля
  4. Если элемент существует, продолжайте загрузку файла в Azure, иначе вернитесь
  5. Загрузка файла в Azure
  6. Сохраните URL-адрес файла в том же документе MongoDB, который был найден в

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

var form = new multiparty.Form();
var formField = "";
form.parse(req, function(err, fields, files) {
  formField = fields.fieldinform[0];
});
console.log(formField); //empty async?

model
  .findOne({ name: formField })
  .then(obj => {
    form.on("part", function(part) {

      if (!part.filename) return;


      var size = part.byteCount;
      var name = part.filename;
      var container = "test";

      blobService.createBlockBlobFromStream(
        container,
        name,
        part,
        size,
        function(error) {
          if (error) {
            console.log("failed");
          }
        }
      );
    });
  })
  .catch(e => {
    //do not continue
  });

Помощь будет высоко ценится!

1 ответ

После долгих поисков и отсутствия правильного ответа я решил использовать jquery, который перед отправкой изменил URL-адрес действия формы на /upload/textintextfield, а затем перехватил его с помощью req.params.textfield в узле.

<script>
$('#fileUploadForm').submit(function() {
$('#fileUploadForm').attr('action', '/upload/addvideo/' + $('#textfield').val())
return true; 
});
</script>
Другие вопросы по тегам