2016-01-12 16 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數據中,假設'。你會在POST中尋找「formName」。 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