我需要使用我的NodeJS Express 4应用程序设置ReST API。
目前,这是我的API。
我有一个家庭资源,它暴露了几个HTTP动词。
GET在MongoDB数据库中执行读取操作。 使用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对象中的每个属性执行此类操作非常无聊,许多代码都无需输入。
我期待一个干净的代码来完成它。
感谢。
埃尔韦
答案 0 :(得分: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"}));
}
});