2015-04-02 62 views
1

這是我的代碼:Node.js參數化路由 - 好壞做法?

router.delete('/delete-:object', function(req, res) { 
    var query; 
    var id = req.body.id; 

    switch (req.params.object) { 

     case 'news' : 
      query = queries['news_delete']; 
      break; 

     case 'member' : 
      query = queries['member_delete']; 
      break; 

     case 'account' : 
      query = queries['account_delete']; 
      break; 

     default : 
      res.sendStatus(404); 
      return; 
    } 

    connection.query(query, id); 
    res.sendStatus(200); 
}); 

是這種做法看作是很好的做法,或者我應該創建我的所有路由單獨router.delete的功能呢?請解釋原因。

回答

0

我說好的做法,因爲它是非常通用的,你總是應該避免愚蠢的代碼重複,因爲你很可能會犯錯誤

你甚至可以概括多一點

router.delete('/delete-:object', function(req, res) { 
var id = req.body.id; 

connection.query(queries[req.params.object], id); 
res.sendStatus(200); 
}); 

(假設您已經按照與對象相同的方式命名查詢

我另外假設您將保護路線,以便沒有登錄的人不能刪除對象。

1

從技術的角度來看 - 我沒有看到這種方法有什麼問題。

但是,您是否需要在對象前添加'delete-'前綴?您已經知道通過HTTP發出刪除,所以它是相當重複的。

這是見仁見智的問題,但我會用:

router.delete('/:object', function(req, res) { 
    var queryName = req.params.object + '_delete'; 

    if(queries.hasOwnProperty(queryName) === false) { 
    res.sendStatus(404); 
    return; 
    } 

    connection.query(queries[queryName], req.body.id); 
    res.sendStatus(200); 
}); 

或者,你可以重構你的queries對象,以便它有一個delete場那是你刪除查詢的對象,避免改寫(munging)共名稱:

var queries = { 
    delete: { 
    'news': '...', 
    'member': '...', 
    'account': '...' 
    } 
}; 

現在您爲您刪除路由對象將映射1:1到你queries.delete對象。

router.delete('/:object', function(req, res) { 
    if(queries.hasOwnProperty(req.params.object) === false) { 
    res.sendStatus(404); 
    return; 
    } 

    connection.query(queries[req.params.object], req.body.id); 
    res.sendStatus(200); 
}); 

另外這裏優點是,如果你添加一個新的對象類型,你會不會需要不斷更新的開關,在你原來的問題。