Node.js + Express: Routes vs controller


98

Mới đối với Node.js và Express, tôi đang cố gắng hiểu hai khái niệm có vẻ trùng lặp, tuyến đường và bộ điều khiển.

Tôi đã thấy các ví dụ đơn giản mà app.js + route / *, điều này dường như đủ để định tuyến các yêu cầu khác nhau cần thiết.

Tuy nhiên, tôi cũng thấy mọi người nói về việc sử dụng bộ điều khiển và một số ngụ ý mô hình MVC chính thức hơn (???).

Sẽ thật tuyệt nếu ai đó có thể giúp tôi xóa bí ẩn này và nếu bạn có một ví dụ điển hình để thiết lập bộ điều khiển trong khung Node.js + Express thì điều đó sẽ rất tuyệt!

Cảm ơn,

Câu trả lời:


129

Một trong những điều thú vị về Express (và Node nói chung) là nó không thúc đẩy nhiều ý kiến ​​về bạn; một trong những nhược điểm là nó không thúc đẩy bất kỳ ý kiến ​​nào về bạn. Do đó, bạn có thể tự do (và bắt buộc!) Để tự thiết lập bất kỳ ý kiến ​​(mẫu) nào như vậy.

Trong trường hợp Express, bạn chắc chắn có thể sử dụng mẫu MVC và trình xử lý tuyến đường chắc chắn có thể phục vụ vai trò của bộ điều khiển nếu bạn muốn - nhưng bạn phải thiết lập nó theo cách đó. Một ví dụ tuyệt vời có thể được tìm thấy trong thư mục Ví dụ nhanh , được gọi là mvc. Nếu bạn nhìn vào lib/boot.js, bạn có thể thấy cách họ đã thiết lập ví dụ để yêu cầu từng tệp trong controllersthư mục và tạo các tuyến Express nhanh chóng tùy thuộc vào tên của các phương thức được tạo trên bộ điều khiển.


2
Đoạn đầu tiên của câu trả lời khá thông minh này cũng đưa ra lời giải thích / phân biệt tốt giữa hai thuật ngữ.
Frank Nocke

1

Bạn có thể chỉ có một thư mục tuyến đường hoặc cả hai. Ví dụ: một số thiết lập các tuyến / đường dẫn (ví dụ: / user /: id) và kết nối chúng với Nhận, Đăng, Đặt / Cập nhật, Xóa, v.v. rồi trong thư mục tuyến:

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

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

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

Sau đó, trong thư mục bộ điều khiển:

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

Chỉ để làm một cái gì đó. Tôi đã thực hiện các dự án không có thư mục bộ điều khiển và đặt tất cả logic vào một nơi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.