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

这种方法是否被认为是很好的做法,还是应该为我所有的路由创build单独的router.delete函数? 请解释为什么。

从技术的angular度来看 – 我不觉得这种方法有什么问题。

但是,您是否需要在对象之前添加“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 queries对象的delete字段,并避免完全删除名称:

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

这里的另一个好处是,如果你添加一个新的对象types,你不需要像原来的问题那样不断地更新开关。

我会说好的做法,因为它是非常通用的,你总是应该避免重复愚蠢的代码,因为你可能会犯错误

你甚至可以概括一点

 router.delete('/delete-:object', function(req, res) { var id = req.body.id; connection.query(queries[req.params.object], id); res.sendStatus(200); }); 

(假设你已经像对象一样命名查询了

我另外假设你将确保路线,以便没有login的人可以删除对象。