在nodejs中提取表单数据

时间:2014-02-12 02:56:49

标签: javascript html node.js

我在html电子邮件中有一个表单发布到/审核 提交表单中的数据来自表单中的输入字段。

我使用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

在不事先知道密钥的情况下提取所需数据的好方法是什么?

1 个答案:

答案 0 :(得分: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];
    }
}