2017-02-01 7 views
1

Я столкнулся с тем, что, по моему мнению, является общей проблемой при использовании типов форм enctype="multipart/form-data" с помощью ExpressJS. Без промежуточного программного обеспечения req.body (или bodyParser) не обрабатывает этот тип формы, и в результате я посылаю null значения для моих полей по запросам POST. В моей форме есть раздел для загрузки файлов, поэтому я использую multipart, и я использую модули multer и multer-s3 для обработки загрузки изображений в ведро s3, но не знаю, как использовать multer или какой-либо другой модуль, чтобы помочь мне сохраните значения полей в моей базе данных Mysql (Sequelize ORM). Может ли кто-нибудь дать указания относительно того, является ли multer правильным модулем, который будет использоваться для загрузки этого типа формы, и укажите мне документацию, где я могу поменять req.body с помощью определенного метода?ExpressJS - форма с загрузкой файла Многостраничный вызов Req.body Issue

Что моя форма выглядит

<form action="/app/post/create" method="post" enctype="multipart/form-data"> 
    <label for="discovery">Discovery:</label> 
    <textarea id="discovery-text-field" name="discovery"></textarea> 
    </br> 
    <label for="report-link">Link to Report:</label> 
    <input type="textarea" name="reportLink"> 
    <br /> 
    <label for="file-attachment">File Attachment:</label> 
    <input type="file" id="file-input" name="fileUpload[]" multiple> 
</form> 

Routing:

appRoutes.route('app/post/create') 

.post(function(req, res){ 

     models.Post.create({ 
      discovery: req.body.discovery, 
      reportLink: req.body.reportLink, 
      userId: req.user.userId  
     }).then(function(){ 
      req.flash('info', 'Post was successfully created.'); 
      res.redirect('/app'); 
     }); 
    }); 

ответ

0

Я не уверен, если вы пытаетесь AJAX для отправки данных, но я не мог получить AJAX для отправки мульти-формы данных правильно, чтобы сделать Малтера счастливым. Вот что я использую с Express и Multer. Ниже приведен пример JQuery, который вы можете использовать для загрузки своих значений форм на ваш сервер. Затем вы можете управлять своими значениями и хранить их на стороне сервера, как вам угодно.

<script language="JavaScript"> 
    $(document).ready(function() { 
     $(".submitButton").click(function() { 
      var values = { 
       fields: $("#IDs").val() 
      }; 
      var http = new XMLHttpRequest(); 
      http.open("POST", '/express/route', true); 
      // stuff into a form 
      var form = new FormData(); 
      form.append('values', JSON.stringify(values)); 
      // send data to server 
      http.send(form); 
     }); 
    }); 
</script> 

стороне сервера

app.post('/express/route', upload.array(), function (req, res, next) { 
    console.log(req.body); 
} 

Теперь у вас есть (то, что я назвал бы одну форму или неприменение мульти формы) значения на стороне сервера.

Я использую Mongo not SQL в данный момент, так что насколько я могу помочь. Я уверен, что есть пакеты, которые вы можете установить (я бы поискал npmjs.com для sql), что позволит вам взаимодействовать с SQL, но Mongo, похоже, сейчас популярен с NodeJS. Вот ссылка, которую я использую для справки при создании стека MEAN: http://www.dotnetcurry.com/nodejs/1032/nodejs-apps-in-visual-studio-mean-stackMEAN stack Также полезно, если у вас есть Visual Studio и вы хотите получить NPM, встроенный в VS.