我在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-...-emotion
和product-...-comment
对可以是一个或多个,在上述情况下为2。
无论有多少对,我都需要提取对并处理它们。
我知道customer_id
和shop_name
总是一样的,所以我按照以下方式得到它们;
var shop = form['shop_name'];
var customer = form['customer_id'];
但其余的都有不可预知的密钥。我试过了
form[2];
但我得到undefined
在不事先知道密钥的情况下提取所需数据的好方法是什么?
答案 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];
}
}