2014-02-12 73 views
0

我在發送到/ review的html電子郵件中有一個表單 提交表單中的數據來自表單中的輸入字段。在nodejs中提取表單數據

我使用req.body獲取表單數據,如下所示;

{ 
    customer_id: '52fa6ded48e3a50000000007', 
    shop_name: 'sage-arts', 

    'product-226039457-emotion': 'sucks', 
    'product-226039457-comment': '1', 

    'product-222924077-emotion': 'rocks', 
    'product-222924077-comment': '12', 

    'submit-review': 'Submit your review' 
} 

product-...-emotionproduct-...-comment雙可以是在上述情況下的一個或多個,2。 無論有多少對,我都需要提取對並處理它們。

我知道customer_idshop_name總是相同的,所以我得到他們如下;

var shop = form['shop_name']; 
var customer = form['customer_id']; 

但其餘的都不可預知的鑰匙。我試圖

form[2]; 

,但我得到undefined

這將是一個很好的方法來提取我需要在不知道事先密鑰的數據?

+0

只是循環和測試開關是否符合您的'product- \ d + - (情緒|評論)'模式? – Bergi

+0

您可以通過Object.keys(表單) –

+1

獲得表單對象中的屬性列表,謝謝你們,我現在已經開始工作了。我嘗試了兩種方法Object.keys(表單)給了我一個所有鍵的數組,我也嘗試過(鍵中的形式),並能夠遍歷所有的鍵。再次感謝 –

回答

1

你將不得不遍歷對象,並做一些匹配:

for(var field in req.body){ 
    if(field.match(/^product-\d+-emotion$/)){ 
     // do something with req.body[field] 
    } 
    if(field.match(/^product-\d+-comment$/)){ 
     // do something with req.body[field] 
    } 
} 

我猜測,這將是有幫助的,所以你有一個由產品ID鍵的目的是改變這個數據。你可以做這樣的事情:

var products = {}; 
for(var field in req.body){ 
    var m; 
    m = field.match(/^product-(\d+)-emotion$/); 
    if(m) { 
     var id = m[1]; 
     if(!products[id]) products[id] = {}; 
     products[id].emotion = req.body[field]; 
     continue; 
    } 
    m = field.match(/^product-(\d+)-comment$/); 
    if(m) { 
     var id = m[1]; 
     if(!products[id]) products[id] = {}; 
     products[id].comment = req.body[field]; 
     continue; 
    } 
} 

如果你的域總是在形式product-99999-something,你能做出這樣更加普遍:在對象上

var products = {}; 
for(var field in req.body){ 
    var m; 
    m = field.match(/^product-(\d+)-(\w+)$/); 
    if(m) { 
     var id = m[1]; 
     var prop = m[2]; 
     if(!products[id]) products[id] = {}; 
     products[id][prop] = req.body[field]; 
    } 
} 
+0

謝謝,這真棒:) –