使用 MassiveJS 实现 REST put/post 节省

Using MassiveJS for REST put/post saves

使用当前版本的 MassiveJS 并表达 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 键值与数据库列名称匹配。这将节省大量时间并且更易于维护。

Massive 不是 ORM,因此保存 "object" 不是个好主意。如果你想更新一些东西,你可以直接使用 db.update 并传入你想要更新的值以及行的 ID。这将为您进行部分更新。

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

最后:如果您只想传递表单 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'
      });
    })
});