Node.js + Express: Rotas vs controlador

98

Novo no Node.js e no Express, estou tentando entender os dois conceitos que parecem se sobrepor, rotas versus controlador.

Eu vi exemplos simples de app.js + routes / *, isso parece ser suficiente para encaminhar várias solicitações necessárias.

No entanto, também vejo pessoas falando sobre o uso de controladores, e alguns que implicam em um modelo MVC mais formal (???).

Seria ótimo se alguém pudesse me ajudar a esclarecer esse mistério, e se você tiver um bom exemplo para configurar o controlador no framework Node.js + Express, isso será ótimo!

Obrigado,

user1462192
fonte

Respostas:

129

Uma das coisas legais sobre o Express (e o Node em geral) é que ele não empurra muitas opiniões sobre você; uma das desvantagens é que não empurra nenhuma opinião sobre você. Portanto, você é livre (e obrigatório!) Para definir essas opiniões (padrões) por conta própria.

No caso do Express, você pode definitivamente usar um padrão MVC, e um manipulador de rotas certamente pode servir como um controlador se você desejar - mas você deve configurá-lo dessa forma. Um ótimo exemplo pode ser encontrado na pasta de exemplos Express , chamada mvc. Se você olhar lib/boot.js, poderá ver como eles configuraram o exemplo para exigir cada arquivo do controllersdiretório e gerar as rotas expressas dinamicamente dependendo do nome dos métodos criados nos controladores.

Michelle Tilley
fonte
2
O primeiro parágrafo desta resposta muito inteligente também está dando uma boa explicação / distinção entre os dois termos.
Frank Nocke
1

Você pode ter apenas uma pasta de rotas ou ambas. Por exemplo, alguns definem rotas / caminhos (ex. / User /: id) e os conectam a Get, Post, Put / Update, Delete, etc. e, em seguida, na pasta de routes:

const subController = require('./../controllers/subController');

Router.use('/subs/:id);

Router
 .route('subs/:id');
 .get(
 subController.getSub
 .patch(
 subController.updateSub
 );

Em seguida, na pasta de controladores:

exports.getSub = (req, res, next) => {
  req.params.id = req.users.id;
};

Apenas para fazer alguma coisa. Eu fiz projetos sem pasta de controladores e coloquei toda a lógica em um só lugar.

C. Johari
fonte