一个服务中的多个资源

时间:2016-10-20 16:46:50

标签: angularjs node.js express mean-stack

在我的MEAN应用程序中,我有一个这样的产品模型:

product: {
        field: //some string value//, 
        reviews: //an array of review objects// 
        }

现在,我将对保存fieldreviews应用不同的限制,因此我的API端点将如下所示:

/* specific route for updating reviews */
router.put('/products/reviews/:id', checkRightsToUpdateReviews, updateProductReviews);

/* specific route for updating field */
router.put('/products/:id', checkRightsToUpdateField, updateProductField);

我的Angular服务productData分别通过方法productData.updateReview(product)productData.updateField(product)达到了这些端点。

因此,在我的productData服务中,我使用了两种资源:

/products/reviews/:id方法的网址为updateReview/products/:id方法的网址为updateField

我觉得我没有正确地分离关注点。

问题源于我的模型具有必须以不同方式处理的字段的事实。但是对于我来说,在一个服务中对products进行所有CRUD操作是有意义的。

对于这个显然更优雅的解决方案是什么?

1 个答案:

答案 0 :(得分:0)

我会使用一个授权中间件来检查这两种情况。

router.put('/products/:id', checkUpdateRights, updateProduct);

function checkUpdateRights(req, res, next){
    if(req.body.reviews && !hasReviewRights(req)){ // check only if reviews exists in body
        res.status(401).send({ error: "Unauthorized to update product reviews" });
    }
    if(!hasUpdateRights(req)){ // for other fields
        res.status(401).send({ error: "Unauthorized to update product" });
    }
    else{
        return next();
    }
};

function hasReviewRights(req){
    // return true or false
};

function hasUpdateRights(req){
    // return true or false
};