2014-11-02 39 views
0

我需要使用NodeJS Express 4應用程序設置ReST API。如何使用NodeJS Express控制PUT請求

目前,這是我的API。

我有一個暴露幾個HTTP動詞的家庭資源。

GET在我的MongoDB數據庫中執行讀操作。 使用familyID獲取帶有id family ID 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

這'PATCH'不'PATH' – Maroshii 2014-11-02 22:26:47

回答

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"})); 
    } 
});