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的人可以删除对象。