2014-02-12 2 views
0

У меня есть форму в 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-...-emotion и product-...-comment пары могут быть один или более, 2 в приведенном выше случае. Мне нужно извлечь пары и обработать их независимо от количества пар.

Я знаю, что customer_id и shop_name всегда одинаковы, поэтому я получаю их следующим образом;

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

Но у остальных есть непредсказуемые ключи. Я попытался

form[2]; 

Но я получаю undefined

Что бы быть хорошим способом, чтобы извлечь данные мне нужно, не зная, ключи заранее?

+0

Просто петлю над объектом и проверить, соответствует ли ключ вашей 'product- \ d + - (эмоция | комментарий)' pattern? – Bergi

+0

Вы можете получить список объектов в объекте формы через Object.keys (form) –

+1

спасибо, ребята, у меня сейчас это работает. Я попробовал оба метода Object.keys (form), дал мне массив всех ключей, я также попробовал (ключ в форме) и смог перебирать все ключи. Еще раз спасибо –

ответ

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] 
    } 
} 

Я предполагаю, что это было бы полезно, чтобы преобразовать эти данные так, у вас есть объект, который заклиненные идентификаторы продукта. Вы могли бы сделать что-то вроде этого:

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

спасибо, это потрясающе :) –

Смежные вопросы