【问题标题】:How to control a PUT request with NodeJS Express如何使用 NodeJS Express 控制 PUT 请求
【发布时间】:2014-11-02 19:15:20
【问题描述】:

我需要使用我的 NodeJS Express 4 应用程序设置一个 ReST API。

目前,这是我的 API。

我有一个家庭资源,它公开了几个 HTTP 动词。

GET 在我的 MongoDB 数据库中执行读取。 GET with familyID 获取 id 为 familyID 的家庭 POST 在数据库中创建一个新的族。 PUT 更新家庭。

我想遵循 ReSTful 理论,因此我想控制何时完成 PUT 以修改所有资源而不是它的一部分(这是一个 PATCH 动词)。

这是我的 nodejs 路由控制器代码:

// Main Function
router.param('famillyId', function(req, res, next, famillyId) {
// typically we might sanity check that famillyId is of the right format
Familly.findById(famillyId, function(err, familly) {
if (err) return next(err);
if (!familly) {
  errMessage = 'familly with id ' + famillyId + ' is not found.';
  console.log(errMessage);
  return next(res.status(404).json({
    message: errMessage
  }));
  }
  req.familly = familly;
  next();
  });
});

/PUT
router.put('/:famillyId', function(req, res, next) {
console.log('Update a familly %s (PUT with /:famillyId).', req.params.famillyId);

req.familly.surname = req.body.surname;
req.familly.firstname = req.body.firstname;
req.familly.email = req.body.email;
req.familly.children = req.body.children;

req.familly.save(function(err, familly) {
  if (err) {
    return next(err);
  }
  res.status(200).json(familly);
  });
});

我想知道进行此控制的最佳方法是什么。我不想为我的 JSON 对象的每条记录使用一系列“if”。有自动的方法吗? 只是为了避免这种代码:

if (req.familly.surname)
  if (! req.body.surname)
    return next(res.status(200).json('{"message":"surname is mandatory"}‘)));

为我的 JSON 对象中的每个属性做这种事情非常无聊,需要输入大量代码。

我期待一个干净的代码来做到这一点。

谢谢。

埃尔韦

【问题讨论】:

  • 这是PATCH 不是PATH

标签: node.js rest express put


【解决方案1】:
var control = ['surname', 'firstname', 'email', 'children'];

control.forEach(function(arg){
  if(!req.body[arg]){
    return next(res.status(200).json({"message": arg + " is mandatory"}));
  }
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-28
    • 2015-11-13
    • 1970-01-01
    • 2018-05-04
    • 2020-10-27
    • 2022-08-19
    • 2018-08-25
    • 2019-06-21
    相关资源
    最近更新 更多