Node.js + Express: Rotalar ve denetleyici


102

Node.js ve Express'te yeni olan iki kavramın örtüşen kavramlarını anlamaya çalışıyorum, yollar ve denetleyici.

App.js + rotaları / * gibi basit örnekler gördüm, bu gerekli çeşitli istekleri yönlendirmek için yeterli görünüyor.

Bununla birlikte, kontrolör kullanmaktan söz eden ve bazılarının daha resmi bir MVC modelini (???) ima ettiğini de görüyorum.

Birisi bu gizemi gidermeme yardımcı olabilirse ve Node.js + Express çerçevesinde denetleyici kurmak için iyi bir örneğiniz varsa harika olur!

Teşekkürler,

Yanıtlar:


131

Express (ve genel olarak Node) hakkındaki harika şeylerden biri, sizin hakkınızda çok fazla fikir öne sürmemesidir; dezavantajlarından biri, sizin hakkınızda herhangi bir fikri zorlamamasıdır. Bu nedenle, bu tür fikirleri (kalıpları) kendi başınıza oluşturmakta özgürsünüz (ve gerekli!).

Express söz konusu olduğunda, kesinlikle bir MVC kalıbı kullanabilirsiniz ve bir yol işleyicisi, isterseniz kesinlikle bir denetleyici rolünü yerine getirebilir - ancak bunu bu şekilde ayarlamanız gerekir. Buna en iyi örnek bulunabilir Ekspres örnekler klasöründe adlandırılan mvc. Bakarsanız lib/boot.js, controllersdizindeki her bir dosyayı gerektirecek örneği nasıl ayarladıklarını ve denetleyicilerde oluşturulan yöntemlerin adına bağlı olarak anında Express rotalarını oluşturduklarını görebilirsiniz.


2
Bu oldukça akıllı cevabın ilk paragrafı da iki terim arasında iyi bir açıklama / ayrım sağlıyor.
Frank Nocke

1

Sadece bir rota klasörünüz veya her ikisine birden sahip olabilirsiniz. Örneğin, bazı yollar / yollar (örn. / Kullanıcı /: kimlik) ayarlar ve bunları Al, Gönder, Koy / Güncelle, Sil, vb. Ve ardından yollar klasörüne bağlar:

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

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

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

Ardından, denetleyiciler klasöründe:

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

Sadece bir şeyler yapmak için. Denetleyici klasörü olmayan projeler yaptım ve tüm mantığı tek bir yere yerleştirdim.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.