【问题标题】:Using MassiveJS for REST put/post saves使用 MassiveJS 进行 REST put/post 保存
【发布时间】:2016-08-06 04:40:10
【问题描述】:

使用当前版本的 MassiveJS 和 express 进行 API 调用。当使用 SAVE 函数时,Massive 想要一个列名列表更新如下:

router.put('/:id', function(req, res, next) {
  db.suppliers.save(
    {
      id: +req.params.id,
      name: req.body.name,
      email: req.body.email,
      column1: req.body.column1,
      column2: req.body.column2,
      column3: req.body.column3,
      manyOtherColumns: req.body.manyOtherColumns,
      etc...
    }, function (err, result) {
      if (err) {
        return next(err);
      }
      return res.status(200).json({
        status: 'SUCCESS',
        message: 'Supplier has been saved'
      });
    })
});

如您所见,随着列列表越来越长,这段代码变得越来越难以维护。所以我想知道是否有一种方法可以在单个调用中保存整个 req.body 假设 req.body 键值与 db 列名匹配。这将节省大量时间并且更易于维护。

【问题讨论】:

  • 您是否熟悉过度发布?例如,这允许恶意用户设置 admin:true。我真的建议将您的表单帖子列入白名单。
  • 我不熟悉过度发布/白名单。所有演示使用 REST 发布表单的培训示例都没有提及这些概念。谷歌搜索会产生令人困惑的响应,并且在我的场景中没有明确的应用方法 - MassiveJS 和 Express/Express.Router()。现在,我既好奇又有点沮丧,因为必须将另一层复杂性应用于像将数据发布到数据库后端这样简单的事情。您有什么可以帮助我理解这一点的 - 特别是它适用于您的解决方案,Massive?
  • Rob - 我相信您引用的内容类似于此帖子:stackoverflow.com/questions/28701258/mysql-whitelist-query。我完全理解这一点,并内置了防止恶意帖子的保护措施,并确保用户可以访问并且只能发布授权数据,并且只能来自授权人员。我只是不熟悉“白名单”这个词。这是否与我最初的问题有关,即在使用 Massive.save() 时列出几十个列的乏味和维护问题?有没有更好的方法来做到这一点?
  • 有点不同。我使用了“过度发布”一词,但我的意思是说“大量分配”。您可以在此处阅读有关 Github 如何以这种方式受到损害的信息:gist.github.com/peternixey/1978249。问题是您永远不想让 API 保持打开状态,以便人们可以为您不希望分配的事物分配值。

标签: javascript rest massivejs


【解决方案1】:

Massive 不是 ORM,所以不是保存“对象”的想法。如果你想更新一些东西,你可以直接使用db.update 并传入你想要更新的值以及行的id。这将为您进行部分更新。

正如我在 cmets 中提到的,打开一个 REST 端点来更新用户通过 POST 发送的任何内容可能不是一个好主意,即使您确实信任您的用户。

最后:如果您只想传递表单帖子,您可以:

router.put('/:id', function(req, res, next) {
  var supplier = {
    id: req.params.id;
  };
  supplier = _.extend(supplier, req.params.body);
  db.suppliers.save(
    supplier
    , function (err, result) {
      if (err) {
        return next(err);
      }
      return res.status(200).json({
        status: 'SUCCESS',
        message: 'Supplier has been saved'
      });
    })
});

【讨论】:

  • 哇。这对我来说是新的。我很难理解。您似乎是在告诉我,使用“活动记录”模式(允许访问所有表列)发布可能会引发大规模分配攻击。而且,如果我对您的理解正确,通过逐项列出 POST 更新的列,可以避免此类攻击。这就是您所说的将表单帖子列入白名单吗?
猜你喜欢
  • 1970-01-01
  • 2020-02-28
  • 2016-05-28
  • 1970-01-01
  • 2011-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-18
相关资源
最近更新 更多