Должен ли я использовать enctype=»application / x-www-form-urlencoded» или enctype= ‘multipart /form-data’ для отправки как загружаемых файлов, так и текста с использованием AJAX в nodejs?

#node.js #ajax #upload #multer #enctype

#node.js #ajax #загрузка #мультер #тип ввода

Вопрос:

Это HTML-код формы. Я использую enctype="application/x-www-form-urlencoded" в настоящее время.

   <form  name="{{this.status}}" class="commonForm" enctype="application/x-www-form-urlencoded" action="/api/upload/{{this.commonID}}" method="post">
<td>
      <input type="file" id="{{this._id}}" class="form-control" name="FileUploadForClient" multiple required {{this.statusDisabled}} />
    </td>
    <td>
      <button type="submit" class="btn btn-primary btn-block col-sm-2" style="font-size:16px" {{this.statusDisabled}}>Submit</button>
</td>
</form>
 

МОЙ вызов AJAX:

  var formData = new FormData(this);
    formData.append('text',"Awesome Font!");

    $.ajax({
        type: "POST",
        url: $(this).attr('action'),
        data: formData,
        processData: false,
        contentType: false,
        dataType: "json",
        success: function(response){
            if (response.status == '200') {

        $.LoadingOverlay("hide");

        swal({
        title: "Excellent!",
        text: "Files submitted successfully!",
        icon: "success",
        button: "Ok",
        showCancelButton: true
      }).then((result) => {
        if (result) {
            window.location.reload();
        }
      });
 

Я хочу отправить текстовое поле, которое я добавил выше, вместе с загруженными файлами.
Файлы успешно отправлены, но когда я пытаюсь использовать req.body.text в nodejs нем, это не определено. Почему?????????????

Вот код маршрута:

 router.post('/api/upload/:cid',function(req,res,next){
console.log("yes it came under api");

console.log("req.body.text = "   req.body.text   req.query.text);

      upload2(req,res,function(err) {
          if(err) {
            console.log("Error is important = "  err);
          }
          else
          {
            console.log("Uploaded");

}
})
})
 

Итак, моя главная проблема: как получить доступ к текстовому полю на стороне сервера nodejs после отправки через AJAX with FormData ??? Пожалуйста, помогите!!!

Комментарии:

1. Formdata анализирует данные вашего запроса как составную форму, и вам необходимо проанализировать форму в express с использованием промежуточного программного обеспечения. Нет необходимости использовать formdata, если вы не отправляете разные типы данных, например. изображения, аудио и т. Д. Просто напрямую задайте данные в вашем ajax-вызове для объекта.

2. Тогда как проанализировать FormData в express с помощью промежуточного программного обеспечения? И я уже упоминал, что я также хочу отправлять файлы pdf, jpg, png вместе с данными json.

3. multer — хорошее промежуточное программное обеспечение для составных форм для express