2016-01-12 1 views
0

У меня есть две формы на моей странице HTML:node.js: Как различать две формы на стороне сервера?

<form id="enterForm" action="/" enctype="multipart/form-data" method="post"> 
    <fieldset> 
     <textarea id="queries" name="queries"></textarea><br /> 
     <input type="submit" value="submit" /> 
    </fieldset> 
</form> 
<form id="uploadForm" action="/upload" enctype="multipart/form-data" method="post"> 
    <fieldset> 
     <input type="file" name="upload"><br /> 
     <input type="submit" value="Upload"> 
    </fieldset> 
</form> 

На стороне сервера, я должен вызвать соответствующие функции, на основании которых формируют Передать кнопка была нажата.

В настоящее время, я делаю так:

var server = http.createServer(function (req, res) { 
    if (req.url == '/upload' && req.method.toLowerCase() == 'post') { 
     processFile(req, res); 
    } 
    else if (req.method.toLowerCase() == 'post') { 
     processField(req, res); 
    } 
} 

Моим вопрос, есть ли другой способ для сервера, чтобы узнать, какой тип Передать была нажата кнопка? В идеале я хотел бы сохранить url одинаковым для обеих форм.

+1

Немым и простым решением является помещение скрытого ввода внутри каждой формы, которая идентифицирует форму. – user2867288

+0

Можете ли вы сообщить мне, что должно быть написано на стороне сервера, чтобы прочитать этот скрытый ввод? – SaadH

+0

Это другой вопрос, он будет указан в ваших данных POST, предполагая '. Вы должны искать «formName» в POST. http://stackoverflow.com/questions/4295782/how-do-you-extract-post-data-in-node-js – user2867288

ответ

1

У вас может быть поле скрытой формы для каждой формы.

<form id="enterForm" action="/" enctype="multipart/form-data" method="post"> 
<fieldset> 
    <textarea id="queries" name="queries"></textarea><br /> 
    <input type="hidden" name="formInstance" value="form1" /> 
    <input type="submit" value="submit" /> 
</fieldset> 
</form> 
<form id="uploadForm" action="/" enctype="multipart/form-data" method="post"> 
<fieldset> 
    <input type="file" name="upload"><br /> 
    <input type="hidden" name="formInstance" value="form2" /> 
    <input type="submit" value="Upload"> 
</fieldset> 
</form> 

Затем на сервере вы можете проанализировать тело запроса, чтобы узнать, какое значение присвоено formInstance. Однако для этого требуется довольно много строк кода, если вы не используете модуль для синтаксического анализа тела. Таким образом, вы можете использовать модуль, такой как node-formidable. Тогда вы можете сделать что-то вроде следующего.

var server = http.createServer(function (req, res) { 
    if (req.url == '/' && req.method.toLowerCase() == 'post') { 
     var form = new formidable.IncomingForm(); 
     form.parse(req, function(err, fields, files) { 
      if(fields.formInstance == 'form1') { 
       processField(req, res); 
      } 
      else if(fields.formInstance == 'form2') { 
       processFile(req, res); 
      } 
     } 
    } 
} 
+0

Спасибо. Это то, что я искал. – SaadH