从NodeJS中的POST对象创建数组的另一种方法

时间:2016-11-23 09:26:57

标签: javascript arrays node.js express

我正在尝试重构这一点,特别是记录数组

app.post('/insert', function(req,res){

   var record = {
       operator: req.body.operator,
       email: req.body.email,
       telephone: req.body.telephone,
       notes: req.body.notes
       };

   dbconn.query('INSERT INTO operators SET ? ', record, function(err,result){
       if(err) {
         console.log(err);
       }
       else {
        console.log('Last record insert :' + req.body.operator);
        res.redirect('/myrecords');
       }
   });
});

以下工作正常

app.post('/insert', function(req,res){

  var record = req.body;  // <- Refactored

  dbconn.query('INSERT INTO operators SET ? ', record, function(err,result){
     if(err) {
        console.log(err);
     }
     else {
        console.log('Last record insert :' + req.body.operator);
        res.redirect('/myrecords');
     }
   });
});

虽然从html表单中发布的对象正在插入到记录数组中并正确保存到DB中,但我仍然不相信这是正统的方式。

我错过了什么或者只是一种错误的感觉?我尝试使用循环来获取所有req.body.data,但我放弃了它。

以上方式的任何可能性都会在以后的任何情况下导致错误吗?

2 个答案:

答案 0 :(得分:1)

一个问题是您没有在运算符表上设置“允许”列的白名单。在第一个示例中,代码确保仅在要插入的新行上设置运算符,电子邮件,电话和备注列。在第二个示例中,用户添加到其POST请求正文的任何​​字段都将在要插入的新行上设置具有相同名称的列。这可能没问题,但如果您有任何列,您不希望您的用户能够在运算符表中进行设置,那么第二种方式是不安全的。

答案 1 :(得分:1)

第二种方法可能存在安全问题,因为可能会通过劫持您的帖子数据对象将不需要的值插入数据库。

例如,如果有人将operator_id添加到帖子对象中,并且operator_id表中包含字段operator,那么您的operator_id值将会插入不受欢迎的价值。