2015-04-02 2 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); 
}); 

Другим преимуществом является то, что если вы добавляете новый тип объекта, вам не нужно будет постоянно обновлять переключатель, как в вашем первоначально вопросе.

Смежные вопросы