这是我的代码:
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 :(得分: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
字段,该字段是删除查询的对象,并避免完全更改名称:
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);
});
此处的另一个优点是,如果添加新的对象类型,则无需像原始问题那样不断更新交换机。
答案 1 :(得分:0)
我说好的做法,因为它非常通用,你总是应该避免重复愚蠢的代码,因为你可能会犯错误
你甚至可以概括一点
router.delete('/delete-:object', function(req, res) {
var id = req.body.id;
connection.query(queries[req.params.object], id);
res.sendStatus(200);
});
(假设您以与对象相同的方式命名查询
我还假设您将保护路线,以便没有登录的人可以删除对象。